2011-11-17 60 views
0

我对鼠标的监听器右键单击事件触发关闭CreateContextMenu()有上下文菜单关闭外线C#鼠标点击

功能如下:

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)。如果用户单击控件外部,我也希望菜单关闭。我怎样才能做到这一点?

+0

你用什么GUI? Windows窗体? – smhnkmr

+0

@mhn我正在使用WPF GUI – Saggio

+0

我无法重现您的问题:使用您的代码,我的上下文菜单关闭确定。 所以这个问题必须在你的PreviewMouse(Left)ButtonDown或其他地方。 – GameAlchemist

回答

0

尝试Dispose方法来关闭它

.Dispose() 
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}; 

这不是实际的代码,用它作为参考。