首页 > 解决方案 > 具有 IsCheckable 属性的 MenuItem 始终为 IsChecked 返回 True

问题描述

我有一个设置 IsCheckable = True 的 MenuItem 和一个触发 Click 事件的方法,该事件检查或取消选中 MenuItem。

<MenuItem x:Name="DebugWindowMenuItem" Header="Debug Window" IsCheckable="True" IsChecked="False" Click="DebugWindow_Click" />

然后我的 C# 代码看起来像这样......

private void DebugWindow_Click(object sender, RoutedEventArgs e) {
    Console.WriteLine(DebugWindowMenuItem.IsChecked);

    if (DebugWindowMenuItem.IsChecked == true) {
        DebugWindow.Visibility = Visibility.Collapsed;
        DebugWindowMenuItem.IsChecked = false;
    } else {
        DebugWindow.Visibility = Visibility.Visible;
        DebugWindowMenuItem.IsChecked = true;
    }
}

我显然遗漏了一些东西,因为 XAML 声明它没有被检查,但控制台输出显示它是每次我单击 DebugWindowMenuItem 时。

我还缺少另一个参数吗?

更新:基本上,不要设置 IsChecked。将可检查的 MenuItem 视为 CheckBox。

标签: wpfmenuitem

解决方案


您的问题是您没有考虑过内置行为。

如果您像这样使菜单项可检查。

怎么了?

它就像一个复选框。

单击复选框时会发生什么?

如果你注释掉你的代码,那么你有:

    private void DebugWindow_Click(object sender, RoutedEventArgs e)
    {
        Console.WriteLine(DebugWindowMenuItem.IsChecked);
    }

当您单击它时,菜单项会出现一个勾号,并且 ischecked 变为 true。再次点击它,它变成了假的。

不要设置 Ischecked。


推荐阅读