У меня есть список, в котором элементы содержат флажки:
<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.
Ответ Кента положил меня на правильный путь, вот что я закончил:
<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, потому что по умолчанию, когда вы нажимаете пробел в списке, он отменяет все, кроме последнего выбранного элемента.