J'ai une zone de liste où les articles contiennent des cases à cocher:WPF problème de sélection ListBoxItem
<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>
Le problème que je vais avoir est que lorsque je clique sur la case à cocher ou de son contenu, le ListBoxItem parent ne soit pas sélectionné. Si je clique sur l'espace blanc à côté de la case à cocher, le ListBoxItem est sélectionné. Le comportement que j'essaie d'obtenir est de pouvoir sélectionner un ou plusieurs éléments dans la liste et d'utiliser la barre d'espace pour activer et désactiver les cases à cocher.
Quelques infos:
private void Checkbox_Click(object sender, RoutedEventArgs e)
{
CheckBox chkBox = e.OriginalSource as CheckBox;
}
Dans le code ci-dessus lorsque je clique sur une case à cocher, e.Handled est faux et chkBox.Parent est nulle.
réponse de Kent m'a mis sur la bonne voie, voici ce que je fini avec:
<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>
je devais utiliser PreviewKeyDown car par défaut lorsque vous appuyez sur la barre d'espace dans une zone de liste, il désélectionne tout sauf le dernier élément sélectionné.
C'est comme ça que je l'ai eu au début. Le défaut est que les états de la case à cocher sont liés à l'état de sélection du contrôle de liste, ce qui n'est pas un comportement normal pour un contrôle de liste contenant des cases à cocher. –