具有IsCheckable属性的MenuItem始终为IsChecked返回True

时间:2019-03-01 18:26:45

标签: wpf menuitem

我有一个MenuItem,其中设置了IsCheckable = True,并且有一个在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。

1 个答案:

答案 0 :(得分:0)

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

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

会发生什么?

它就像一个复选框。

单击复选框会发生什么?

如果您注释掉代码,则可以:

try {
    service = Executors.newFixedThreadPool(1);
    context = new AuthenticationContext(authority + tenant + "/", true,
            service);
    Future<AuthenticationResult> future = context
            .acquireTokenByRefreshToken(refreshToken, new ClientCredential(clientId, clientSecret), null, null);
    result = future.get();
} catch (ExecutionException e) {
    throw e.getCause();
} finally {
    service.shutdown();
}

单击时,菜单项会出现一个勾号,并且被选中为true。 再次单击它,它将变为false。

不设置Ischecked。