当用户在菜单外单击时,如何使WPF上下文菜单消失?

当用户在菜单外单击时,如何使WPF上下文菜单消失?,wpf,forms,contextmenu,notifyicon,lostfocus,Wpf,Forms,Contextmenu,Notifyicon,Lostfocus,首先,标准信息: VS2010终极版 Win7 Ultimate x64 WPF应用程序 WPF上下文菜单: <ContextMenu x:Key="RightClickSystemTray" Placement="MousePoint"> <MenuItem Header="Exit" Click="Menu_Exit"></MenuItem> </ContextMenu> 上下文菜单是在XAML中构建的WPF上

首先,标准信息:

VS2010终极版
Win7 Ultimate x64
WPF应用程序

WPF上下文菜单:

    <ContextMenu x:Key="RightClickSystemTray" Placement="MousePoint">
        <MenuItem Header="Exit" Click="Menu_Exit"></MenuItem>
    </ContextMenu>
上下文菜单是在XAML中构建的WPF上下文菜单。系统托盘中的notify图标是一个Forms notify图标(我不知道本机WPF notify图标)。因此,不会使用notifyicon.ContextMenu属性。上面的代码运行良好。当用户右键单击notify图标时,上下文菜单将显示它应该显示的内容

我遇到的问题是在我想要的时候让ContextMenu消失。只要你点击WPF应用程序中的某个地方,它就会消失。这种行为是自动的。但是,如果用户点击其他地方,比如任务栏,菜单不会消失。“LostFocus”事件不会触发,因为这些类型的事件只有在同一应用程序中的某个元素与另一个元素失去焦点时才会触发。就应用程序而言,ContextMenu永远不会失去焦点。“停用”是我尝试使用的另一个事件。此时我应该澄清,应用程序有一个“关闭托盘”选项,因此应用程序可以在用户有机会右键单击并显示菜单之前关闭并触发已停用的事件。当菜单出现时,该应用程序不会被重新激活,因此当我点击任务栏时,被禁用的应用程序甚至不会启动


最后,问题来了。当用户从上下文菜单中单击时,如何让上下文菜单消失,即使用户单击的位置不在创建上下文菜单的应用程序中?

我不知道这是否是一个可行的选项,但如果切换到,您将有一个集成良好的WPF托盘图标,而不会出现此类问题(还有上下文菜单的示例代码)

    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;
        }
    }