【发布时间】:2011-11-17 19:53:44
【问题描述】:
我在鼠标右键单击事件上有一个监听器,该事件触发 CreateContextMenu()
函数如下所示:
protected virtual ContextMenu CreateContextMenu()
{
ContextMenu contextMenu = new ContextMenu();
MenuItem ClickHereMenuItem = new MenuItem();
ClickHereMenuItem.Header = "Click Here";
ClickHereMenuItem.Tag = contextMenu;
ClickHereMenuItem.Click += ClickHere_Click;
contextMenu.Items.Add(ClickHereMenuItem);
contextMenu.Items.Add(new Separator());
//Cancel Menu Item
MenuItem cancelMenuItem = new MenuItem();
cancelMenuItem.Header = "Cancel";
cancelMenuItem.Tag = contextMenu;
cancelMenuItem.Click += cancelMenuItem_Click;
contextMenu.Items.Add(cancelMenuItem);
return contextMenu;
}
一切都按预期进行,但关闭上下文菜单的唯一方法是选择“取消”菜单项(它只设置contextMenu.IsOpen = false)。如果用户在控件之外单击,我还希望菜单关闭。我怎样才能做到这一点?
【问题讨论】:
-
你使用什么 GUI? Windows 窗体?
-
我无法重现您的问题:使用您的代码,我的上下文菜单可以正常关闭。所以问题一定出在你的 PreviewMouse(Left)ButtonDown 或其他地方。
-
@mhn 我正在使用 WPF GUI
-
那么在
System.Windows.Control.ContextMenu之外单击以关闭它是默认功能吗?为什么这不起作用呢?除了 OnRightMouseclick 之外,我没有重载任何东西.. -
重载 OnRightMouseClick ???您的意思是向 OnRightMouseClick 添加事件处理程序,不是吗? (你必须有一些很好的理由来重载,而不是仅仅为目前看起来很简单的情况添加事件处理程序。)
标签: c# wpf contextmenu