【问题标题】:Unchecking item in a context menu取消选中上下文菜单中的项目
【发布时间】:2011-05-09 04:14:06
【问题描述】:

我目前在 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”菜单项 - 否则将选中该项目但窗口不会打开(如果用户想要重新启用窗口等,这会让用户感到困惑)。

关于如何处理这个问题的任何想法?我需要基本上取消选中菜单项。我可以解构菜单并重新构建它,但这似乎是在浪费时间。

一如既往,提前感谢您的帮助。

【问题讨论】:

    标签: c# contextmenu menuitem trayicon


    【解决方案1】:

    所以您只想在窗口关闭时以编程方式取消选中菜单项?您只需设置IsChecked

    displayOnScreenControls.IsChecked = false;
    

    把它放在你的 Window.Closed 事件处理程序中,你应该会很好。

    【讨论】:

    • 我误解了 ContextMenu.Items.Add() 函数的工作原理。出于某种原因,我相信它实际上会创建 MenuItem 的副本——而不是引用现有对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多