Wpf 有界复选框未触发事件

Wpf 有界复选框未触发事件,wpf,events,binding,Wpf,Events,Binding,我有一个复选框,在该复选框中,属性被选中并绑定到另一个复选框。在参考资料块中,我设置了一个样式,为复选框设置事件触发器。代码如下: <Style x:Key="cbClickEvent" TargetType="{x:Type CheckBox}"> <EventSetter Event="Click" Handler="CheckBox_Click"/> </Style> <StackPanel Grid.Column="0" Grid.Row

我有一个复选框,在该复选框中,属性被选中并绑定到另一个复选框。在参考资料块中,我设置了一个样式,为复选框设置事件触发器。代码如下:

<Style x:Key="cbClickEvent" TargetType="{x:Type CheckBox}">
   <EventSetter Event="Click" Handler="CheckBox_Click"/>
</Style>

<StackPanel Grid.Column="0" Grid.Row="1">
   <CheckBox x:Name="cbAll" Content=" All" VerticalAlignment="Center"/>
   <CheckBox Content=" MyCB" VerticalAlignment="Center" IsChecked="{Binding ElementName=cbAll, Path=IsChecked, Mode=OneWay}" Style="{StaticResource cbClickEvent}"/>
</StackPanel>

单击复选框MyCB时,会触发事件,但单击复选框All时不会触发事件。我错过了什么?

2种可能的孤独:

1) 添加

转到cbAll复选框

2) 从MyCB复选框中删除该行,并从样式中删除x:Key属性。它将如下所示:

<Window.Resources>
    <Style TargetType="{x:Type CheckBox}">
        <EventSetter Event="Click" Handler="CheckBox_Click"/>
    </Style>
</Window.Resources>


<StackPanel Grid.Column="0" Grid.Row="1">
    <CheckBox x:Name="cbAll"
              Content=" All"
              VerticalAlignment="Center" />
    <CheckBox Content=" MyCB"
              VerticalAlignment="Center"
              IsChecked="{Binding ElementName=cbAll, Path=IsChecked, Mode=OneWay}" />
</StackPanel>

这是因为当您单击“全部”复选框时,值会通过绑定传递到“MyCB”复选框。但是在您订阅
Click
事件的样式中,该事件在本例中显然不会触发,因为您实际上没有单击“MyCB”复选框(您单击“All”)

您可以做的是,您可以订阅
选中的
未选中的
事件,而不是订阅
单击
事件:

<EventSetter Event="Checked" Handler="CheckBox_Checked"/>
<EventSetter Event="Unchecked" Handler="CheckBox_Unchecked"/>


这也不会使它起作用,问题是他没有将样式设置为cbAll复选框,即使他向选中和未选中的事件添加处理程序,如果他没有首先将样式设置为cbAll复选框,这些事件仍然不会被触发。@Carlo-当您单击“All”复选框时,值(
将被选中)
)将通过绑定传输到“MyCB”的
IsChecked
。由于
IsChecked
值已更改,因此
选中的
/
未选中的
事件将在“MyCB”复选框(应用样式的地方)上触发,因此将执行处理程序。是的,我听到了,但是IsChecked与Click事件无关。您可以选中和取消选中,单击事件将被触发(当然,通过单击选中和取消选中)。您的意思是,如果他订阅了Checked和Unchecked事件,那么Checked和Unchecked处理程序将同时在两个复选框上被激发(因为IsChecked属性是绑定的)。但是,如果您仔细观察,如果样式设置不正确,则cbAll不会订阅Click事件(也不会订阅Checked和Unchecked事件),在本例中,它不是。您不需要在“全部”复选框中订阅任何事件。“MyCB”复选框上的事件将触发,因为“IsChecked”值将更改(由于绑定)。下面是发生的情况:单击“全部”->“全部”。IsChecked changed->“MyCB”。IsChecked changed(binding)->“MyCB”。Checked/Unchecked raised->CheckBox\u Checked/Unchecked executed。您提出的解决方案工作得非常好。我在解决方案中更改的是处理程序,我只对两个事件使用一个处理程序。
<EventSetter Event="Checked" Handler="CheckBox_Checked"/>
<EventSetter Event="Unchecked" Handler="CheckBox_Unchecked"/>