2011-05-09 86 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