アイテムにチェックボックスが含まれるリストボックスがあります。
<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 が選択されます。
私が取得しようとしている動作は、リスト内の 1 つまたは複数の項目を選択し、スペースバーを使用してチェックボックスのオンとオフを切り替えることです。
いくつかの詳細情報:
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 を使用する必要がありました。