2011-11-17 52 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}; 

這不是實際的代碼,用它作爲參考。