2011-05-09 80 views
0

我目前在C#WPF中有一個ContextMenu,它顯示一個MenuItem。這個ContextMenu然後被TrayIcon使用。在上下文菜單中取消選中項目

// menu initialization 
private static System.Windows.Controls.ContextMenu trayMenu = new System.Windows.Controls.ContextMenu(); 

// menu item initialization 
private static System.Windows.Controls.MenuItem displayOnScreenControls = new System.Windows.Controls.MenuItem(); 
displayOnScreenControls.Header = "Display presenter controls"; 
displayOnScreenControls.IsCheckable = true; 
displayOnScreenControls.Checked += new RoutedEventHandler(displayOnScreenControls_Checked); 
displayOnScreenControls.Unchecked += new RoutedEventHandler(displayOnScreenControls_Unchecked); 

// add icons to the tray menu 
trayMenu.Items.Add(displayOnScreenControls); 

「displayOnScreenControls」項目是可檢查的。當用戶選中此選項並滿足某些條件時,將出現一個控制窗口。

如果用戶選擇關閉此窗口,則表示他們不再希望打開控制窗口。爲了保持一致性,我需要取消選中「displayOnScreenControls」菜單項 - 否則會檢查該項目,但該窗口不會打開(如果用戶想要重新啓用窗口,這會讓用戶感到困惑)。

有關如何處理這個問題的任何想法?我需要基本取消選中菜單項。我可以解構菜單並對其進行重構,但這似乎浪費時間。

一如既往,在此先感謝您的任何幫助。

回答

1

所以你只是想以編程方式取消菜單項,當你的窗戶關閉?所有你需要做的是設置IsChecked

displayOnScreenControls.IsChecked = false; 

假如把它放在你的Window.Closed事件處理程序,你應該是不錯的。

+0

我誤解了ContextMenu.Items.Add()函數的工作方式。出於某種原因,我相信它實際上會創建一個MenuItem的副本 - 不會引用現有的對象。 – BSchlinker 2011-05-09 05:33:22