是否有用于WPF的BeforeCheck复选框?
本文关键字:BeforeCheck 复选框 WPF 用于 是否 | 更新日期: 2023-09-27 18:06:57
我的表单上的一些复选框应该不能被用户选中/取消选中。在触发复选框的Check事件之前,我是否有办法取消该事件?
在winForms中很简单,只需
public void cb_BeforeChecked(object sender, EventArgs e){
e.Handled = true;
}
但是我在WPF中找不到这样的东西…我觉得你可能可以做到,只是需要做一些有趣的事情。
谢谢!
为什么不直接设置IsEnabled="False"
可以设置IsHitTestVisible="False",使其不响应用户点击。否则,如果视图模型逻辑确定它是否可单击,则可以将其绑定到命令。
<Grid>
<CheckBox IsHitTestVisible="False" Content="I cannot be clicked at all"/>
<CheckBox Command="{Binding DoSomethingCommand}" Content="I can be clicked if DoSomethingCanExecute returns true."/>
</Grid>
在你的DataContext (Viewmodel或其他):
RelayCommand _DoSomethingCommand = null;
public ICommand DoSomethingCommand
{
get
{
if (_DoSomethingCommand== null)
{
_DoSomethingCommand= new RelayCommand(
param => DoSomething(),
param => DoSomethingCanExecute
);
}
return _DoSomethingCommand;
}
}
public bool DoSomethingCanExecute
{
get
{
return CheckboxShouldBeEnabled();
}
}
public void DoSomething()
{
//Checkbox has been clicked
}
这可能有点小题大做,但您可以子类化CheckBox,然后重写OnClick()方法
仅设置IsHitTestVisible="False"
只需照顾鼠标,用户仍然可以使用键盘tab到CheckBox
并更改值。
您应该设置IsHitTestVisible="False"
和Focusable="False"
禁用键盘
您可以禁用复选框,并将样式与禁用的复选框关联,如果禁用的外观是一个问题。正如之前的文章所指出的,不同的州有不同的外观是很好的。