【问题标题】:MenuItem with IsCheckable property is always returning True for IsChecked具有 IsCheckable 属性的 MenuItem 始终为 IsChecked 返回 True
【发布时间】:2019-03-01 18:26:45
【问题描述】:

我有一个设置 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。

【问题讨论】:

  • 什么是DebugWindowMenuItem? (在您回答这个问题之前,请在调试器中验证并仔细检查您认为 DebugWindowMenuItem 是什么真的是现实。)从您问题中的代码来看,不能 100% 确定 @ 987654324@ 实际上是带有“调试窗口”标题的 MenuItem。此外,如果您反复单击/调用 DebugWindow_Click 处理程序,值是否会更改/切换,或者即使反复调用 DebugWindow_Click 也会保持true
  • 抱歉,我不小心在帖子中留下了名字。虽然它在我的代码中。每次单击该菜单项时都会调用该命令。代码被调用,但 IsChecked 状态始终返回 True。

标签: wpf menuitem


【解决方案1】:

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

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

会发生什么?

它就像一个复选框。

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

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

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

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

不要设置 Ischecked。

【讨论】:

  • 啊啊啊啊啊……有道理。做到了。
猜你喜欢
  • 2012-03-08
  • 2019-10-23
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
相关资源
最近更新 更多