我有一个关于鼠标右键单击事件的监听器,它会触发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
)。如果用户在Control外部单击,我还希望关闭菜单。我怎么能做到这一点?
答案 0 :(得分:0)
尝试使用dispose方法将其关闭
.Dispose()
答案 1 :(得分:0)
创建一个Canvas布局,其高度和宽度占据应用程序窗口大小,将其可见性设置为隐藏,然后将上下文菜单作为子项添加到画布。现在,您可以处理canvas的MouseLeftButtonDown事件,并在其中设置contextMenu.IsOpen = false。现在这个画布占据了你的应用程序的整个工作区域,所以只要你点击右键,就可以打开上下文菜单,只要用户点击左键,就可以关闭上下文菜单。
这是弹出窗口,上下文菜单等在Windows和Web应用程序中的工作方式。
代码与此类似,
Canvas canvas = new Canvas();
canvas.Height = Application.Height; //replace with ur app height
canvas.Width = Application.Width; //replace with ur app width
canvas.Child(ContextMenu);
canvas.MouseLeftButtonDown += (s,e) => { contextMenu.IsOpen = false};
这不是实际代码,请将其用作参考。