Как мне заставить мое контекстное меню WPF исчезнуть, когда пользователь щелкает за пределами меню?

Во-первых, стандартная информация:

VS2010 Ultimate
Win7 Ultimate x64
Приложение WPF

Контекстное меню WPF:

    <ContextMenu x:Key="RightClickSystemTray" Placement="MousePoint">
        <MenuItem Header="Exit" Click="Menu_Exit"></MenuItem>
    </ContextMenu>

Код, чтобы показать это:

    void _notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Right)
        {
            ContextMenu menu = (ContextMenu)this.FindResource("RightClickSystemTray");
            menu.IsOpen = true;
        }
    }

Контекстное меню - это WPF ContextMenu, построенное на XAML. Значок уведомления на панели задач - это значок уведомления форм (я не знаю встроенного значка уведомления WPF). Следовательно, свойство notifyicon.ContextMenu не используется. Код выше работает нормально. Когда пользователь щелкает правой кнопкой мыши значок уведомления, контекстное меню отображается должным образом.

Проблема, с которой я столкнулся, заключается в том, чтобы убрать ContextMenu, когда я хочу. Все уходит нормально, пока вы щелкаете где-нибудь в приложении WPF. Это автоматическое поведение. Но если пользователь щелкнет в другом месте, например на панели задач, меню не исчезнет. События «LostFocus» не срабатывают, потому что эти типы событий срабатывают только тогда, когда элемент теряет фокус на другом элементе в том же приложении. Что касается приложения, ContextMenu никогда не теряет фокус. «Деактивировано» было другим событием, которое я пытался использовать. На этом этапе я должен пояснить, что в приложении есть опция «близко к лотку», чтобы приложение могло закрыть и запустить деактивированное событие до того, как у пользователя появится возможность щелкнуть правой кнопкой мыши и отобразить меню. Приложение не активируется повторно, когда появляется меню, поэтому деактивированное даже не срабатывает, когда я нажимаю на панель задач.

Итак, наконец, вопрос. Как мне заставить мое контекстное меню исчезать, когда пользователь щелкает от него, даже если место, где пользователь щелкает, не находится в приложении, которое создало контекстное меню?


person John    schedule 04.04.2011    source источник


Ответы (1)


Я не знаю, жизнеспособен ли это вариант, но если вы перешли на эту библиотеку, вы ' у меня будет хорошо интегрированный значок в трее для WPF без таких проблем (там также есть образец кода для ContextMenus)

person H.B.    schedule 04.04.2011