如何防止复选框在WPF中单击后自动更改checkState

问题描述 投票:0回答:1

单击复选框时,如何使复选框不更改checkState?

我想将响应单击事件与checkBox中的变量绑定分开,checkBox的checkstate仅与我绑定的变量有关,并且仍然响应click事件(调用click方法,然后单击checkbox)。

示例:如果选中了复选框,则当我再次单击复选框时,仍将选中该复选框。它不会更改checkState,但会响应click事件。我想这样做是因为我为checkBox设置了代码绑定。checkBox'checkState仅与绑定的SomeBoolValue有关。xmal代码:

<CheckBox Name="testCheckBox" Margin="15" Content="Test" Click="testCheckBox_Clicked"/>

隐藏在构造函数内部的代码:

this.testCheckBox.SetBinding(CheckBox.IsCheckedProperty, new Binding("BoolTag") { Source = SomeBoolVariable, Mode = BindingMode.OneWay });

添加我想在点击事件方法中做点事情

private void testCheckBox_Clicked(object sender, RoutedEventArgs e)
{
    // do something
}
wpf data-binding wpf-controls
1个回答
0
投票

您可以处理uielement Previewmouseleftbuttondown。

       <CheckBox UIElement.PreviewMouseLeftButtonDown="CheckBox_PreviewMouseLeftButtonDown"
              IsTabStop="False"
              IsChecked="{Binding SomeBool}"/>

在处理程序中,执行您的click事件所需做的所有事情,并将事件标记为已处理。

    private void CheckBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        // Do whatever you need here
        e.Handled = true;
    }

可能还有其他方法来更改值,因此您可以考虑使用某种方法来停止ui更新视图模型中的该属性。

例如

    private bool someBool = true;

    public bool SomeBool
    {
        get { return someBool; }
        set {  }
    }

使用上述方法,您可以将someBool设置为任何新值,然后提高SomeBool上已更改的属性,以便ui读取更改后的值。

© www.soinside.com 2019 - 2024. All rights reserved.