9

首先,标准信息:

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

上下文菜单是在 XAML 中构建的 WPF ContextMenu。系统托盘中的通知图标是一个表单通知图标(我不知道本机 WPF 通知图标)。因此,不使用 notifyicon.ContextMenu 属性。上面的代码工作正常。当用户右键单击通知图标时,上下文菜单会按原样显示。

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

所以最后,这个问题。当用户点击离开它时,如何让我的上下文菜单消失,即使用户点击的位置不在创建上下文菜单的应用程序中?

4

1 回答 1

0

我不知道这是否是一个可行的选择,但如果你切换到这个库,你将拥有一个没有此类问题的 WPF 的集成托盘图标(那里也有 ContextMenus 的示例代码)

于 2011-04-04T03:36:52.857 回答