wpf - 具有 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。
解决方案
您的问题是您没有考虑过内置行为。
如果您像这样使菜单项可检查。
怎么了?
它就像一个复选框。
单击复选框时会发生什么?
如果你注释掉你的代码,那么你有:
private void DebugWindow_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine(DebugWindowMenuItem.IsChecked);
}
当您单击它时,菜单项会出现一个勾号,并且 ischecked 变为 true。再次点击它,它变成了假的。
不要设置 Ischecked。
推荐阅读
- r - R 等效于 endsWith 来检查字符串列表
- linux - 是否可以在自己的程序中使用 BPF 作为库?
- anaconda - 防止anaconda在没有激活virtual-env时添加`(base)`进行提示(即virtual-env = anaconda base)
- asp.net - 在 Timer 刻度处显示(标签控件)内部(中继器控件)
- python - 使用 OpenCV 改进图像中的矩形轮廓检测
- javascript - 使用多个渲染共享深度缓冲区?
- docker - 如何从公共网络(互联网)访问 docker 服务?
- python - 如何获取当前的 GPIO?
- c++ - 如何减少应用程序的堆栈和堆大小?
- angular - 为什么过滤器运算符的参数没有采用可观察数组中存在的属性