我有一个包含复选框的列表框:
<ListBox Style="{StaticResource CheckBoxListStyle}" Name="EditListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Click="Checkbox_Click" IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" Content="{Binding Path=DisplayText}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我遇到的问题是,当我点击复选框或其内容时,父ListBoxItem不会被选中。如果我单击复选框旁边的空白处,则ListBoxItem会被选中。
我尝试实现的行为是,在列表中选择一个或多个项目,并使用空格键打开和关闭复选框。
更多信息:
private void Checkbox_Click(object sender, RoutedEventArgs e)
{
CheckBox chkBox = e.OriginalSource as CheckBox;
}
在上面的代码中,当我点击复选框时,e.Handled为false,chkBox.Parent为null。Kent的答案让我找到了正确的方向,下面是我的最终结果:
<ListBox Style="{StaticResource CheckBoxListStyle}" Name="EditListBox" PreviewKeyDown="ListBox_PreviewKeyDown">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" />
<TextBlock Text="{Binding DisplayText}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我不得不使用PreviewKeyDown,因为默认情况下,在列表框中按空格键时,它会取消选择除最近选择的项之外的所有项。