一,标准信息:
VS2010 Ultimate
Win7 Ultimate x64
WPF应用程序
WPF上下文菜单:
<ContextMenu x:Key="RightClickSystemTray" Placement="MousePoint">
<MenuItem Header="Exit" Click="Menu_Exit"></MenuItem>
</ContextMenu>
Run Code Online (Sandbox Code Playgroud)
显示它的代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
上下文菜单是在XAML中构建的WPF ContextMenu.系统托盘中的通知图标是表单通知图标(我不知道本机WPF通知图标).因此,不使用notifyicon.ContextMenu属性.上面的代码工作正常.当用户右键单击通知图标时,上下文菜单会显示它应该显示的内容.
我遇到的问题是让ContextMenu在我想要的时候消失.只要你点击WPF应用程序中的某个地方,它就会消失.此行为是自动的.但是,如果用户点击其他地方,例如任务栏,则菜单不会消失."LostFocus"事件不会触发,因为这些类型的事件仅在元素失去焦点到同一应用程序中的另一个元素时触发.就应用而言,ContextMenu永远不会失去焦点."Deactivated"是我试图使用的另一个事件.此时我应该澄清应用程序有一个"接近托盘"选项,因此应用程序可以在用户有机会右键单击并显示菜单之前关闭并触发已停用的事件.当菜单出现时,应用程序不会重新激活,因此当我单击任务栏时,甚至不会激活停用的应用程序.
最后,问题.当用户点击它时,如何让我的上下文菜单消失,即使用户点击的位置不在创建上下文菜单的应用程序中?