Как мне отключить контекстное меню 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 никогда не теряет фокус. «Деактивировано» было еще одним событием, которое я пытался использовать. На этом этапе я должен пояснить, что в приложении есть опция «близко к лотку», чтобы приложение могло закрыть и запустить деактивированное событие до того, как у пользователя появится возможность щелкнуть правой кнопкой мыши и отобразить меню. Приложение не активируется повторно, когда появляется меню, поэтому деактивированное даже не срабатывает, когда я нажимаю на панель задач.

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

9
задан John 4 April 2011 в 03:09
поделиться