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