有界复选框没有触发事件

时间:2011-04-20 19:37:15

标签: wpf events binding

我有一个复选框,其中属性缺血被限制在另一个复选框。在资源块中,我设置了一个样式,用于设置复选框的事件triger。这是代码:

<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 个答案:

答案 0 :(得分:1)

这是因为当您点击“全部”复选框时,该值会通过绑定转移到“MyCB”复选框。但是在你订阅Click事件的风格中,在这种情况下显然没有触发,因为你实际上没有点击“MyCB”复选框(你点击“全部”)。

您可以做的是,您可以订阅ClickChecked事件,而不是订阅Unchecked事件:

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

答案 1 :(得分:0)

2个可能的解决方案:

1)添加

Style="{StaticResource cbClickEvent}"

到cbAll CheckBox

2)从MyCB CheckBox中删除该行,并从样式中删除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>