是否有用于WPF的BeforeCheck复选框?

本文关键字:BeforeCheck 复选框 WPF 用于 是否 | 更新日期: 2023-09-27 18:06:57

我的表单上的一些复选框应该不能被用户选中/取消选中。在触发复选框的Check事件之前,我是否有办法取消该事件?

在winForms中

很简单,只需

public void cb_BeforeChecked(object sender, EventArgs e){
    e.Handled = true;
}

但是我在WPF中找不到这样的东西…我觉得你可能可以做到,只是需要做一些有趣的事情。

谢谢!

是否有用于WPF的BeforeCheck复选框?

为什么不直接设置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"禁用键盘

您可以禁用复选框,并将样式与禁用的复选框关联,如果禁用的外观是一个问题。正如之前的文章所指出的,不同的州有不同的外观是很好的。