我有一个复选框,其中属性缺血被限制在另一个复选框。在资源块中,我设置了一个样式,用于设置复选框的事件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时则不会。我错过了什么?
答案 0 :(得分:1)
这是因为当您点击“全部”复选框时,该值会通过绑定转移到“MyCB”复选框。但是在你订阅Click
事件的风格中,在这种情况下显然没有触发,因为你实际上没有点击“MyCB”复选框(你点击“全部”)。
您可以做的是,您可以订阅Click
和Checked
事件,而不是订阅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>