tengo un cuadro de lista donde los elementos contienen casillas de verificación:WPF ListBoxItem problema de selección
<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>
El problema que estoy teniendo es que cuando hago clic en la casilla de verificación o de su contenido, el ListBoxItem padre no ser seleccionado. Si hago clic en el espacio en blanco junto a la casilla de verificación, se selecciona ListBoxItem.
El comportamiento que intento obtener es poder seleccionar uno o varios elementos de la lista y usar la barra espaciadora para activar y desactivar las casillas de verificación.
algo más de información:
private void Checkbox_Click(object sender, RoutedEventArgs e)
{
CheckBox chkBox = e.OriginalSource as CheckBox;
}
En el código anterior cuando hago clic en una casilla de verificación, e.Handled es falsa y chkBox.Parent es nulo.
respuesta de Kent me puso por el camino correcto, esto es lo que terminó con:
<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>
tuve que usar PreviewKeyDown porque por defecto cuando se pulse la barra espaciadora en un cuadro de lista, se anula la selección de todo a excepción de el elemento seleccionado más recientemente.
Así lo hice al principio. El error es que los estados de la casilla de verificación están vinculados al estado de selección de control de lista, que no es el comportamiento normal para un control de lista que contiene casillas de verificación. –