带有 IsCheckable 属性 的 MenuItem 总是为 IsChecked 返回 True
MenuItem with IsCheckable property is always returning True for IsChecked
我有一个 MenuItem,我在其中设置了 IsCheckable = True 和一个在检查或取消选中 MenuItem 的 Click 事件上触发的方法。
<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。
你的问题是你没有考虑内置行为。
如果您使菜单项像那样可检查。
会发生什么?
它就像一个复选框。
单击复选框时会发生什么?
如果您注释掉您的代码,那么您有:
private void DebugWindow_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine(DebugWindowMenuItem.IsChecked);
}
当您点击它时,菜单项会出现一个勾号,并且 ischecked 变为 true。
再点一下就变成false了
不要设置 Ischecked。
我有一个 MenuItem,我在其中设置了 IsCheckable = True 和一个在检查或取消选中 MenuItem 的 Click 事件上触发的方法。
<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。
你的问题是你没有考虑内置行为。
如果您使菜单项像那样可检查。
会发生什么?
它就像一个复选框。
单击复选框时会发生什么?
如果您注释掉您的代码,那么您有:
private void DebugWindow_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine(DebugWindowMenuItem.IsChecked);
}
当您点击它时,菜单项会出现一个勾号,并且 ischecked 变为 true。 再点一下就变成false了
不要设置 Ischecked。