2011-05-05 33 views
7

Solo quería el CheckListBox que solía usar con Windows Forms.WPF, ItemTemplate de ListBox tiene CheckBox, pero CheckBox no parece ser el elemento

<ListBox> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <CheckBox Content="{Binding Name}"/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 

Al principio, esto parecía funcionar, pero hubo numerosos problemas. En resumen, simplemente funciona como un CheckBox flotante en el elemento real, en lugar de que el CheckBox es el elemento.

Es decir, (1) al hacer clic en el texto de la casilla de verificación no seleccionaría el elemento ListBox, (2) al presionar las teclas arriba y abajo no se enfoca la casilla de verificación. Tengo que hacer clic en la casilla de verificación para enfocarlo. Busqué soluciones de Google pero no hubo soluciones claras. ¿Estoy deseando demasiado?

Sólo quiero que el behavour de CheckedListBox ...

trabajé alrededor de (1) por el manejo del evento PreviewMouseDown de la casilla y seleccionar manualmente el elemento. No parece estar limpio.

Respuesta

9

Esto es porque su CheckBox está en un ListBox. Se maneja como un elemento de la lista con todas sus características.

Si solo desea crear una lista de casillas de verificación y no necesita la lógica de selección de la lista, utilice ItemsControl en lugar de ListBox. El uso es igual. Si desea que su CheckboxList sea desplazable, use ScrollViewer para ajustar ItemsControl.

<ScrollViewer> 
    <ItemsControl ItemsSource="{Binding YourItemsCollection">  
     <DataTemplate>     
      <CheckBox Content="{Binding Name}"/> 
     </DataTemplate> 
    </ItemsControls> 
</ScrollViewer> 
0

respuesta seleccionada para la pregunta vinculada (WPF ListBoxItem selection problem) proporciona una solución limpia! Estaba atrapado en el mismo escenario -> encontré tu pregunta -> encontré el otro con el remedio. HTH!