Dependiendo de la semántica exacta que usted desea, la solución puede ser extremadamente simple:
Si la raíz del árbol es cualquier cosa menos un TreeView
- por ejemplo, si se trata de un ItemsControl
sin formato, todos los elementos TreeViewItems en el árbol serán seleccionables independientemente, por lo que básicamente obtendrá mulitiselect de forma gratuita. Así que solo use un ItemsControl
en lugar de un TreeView
para la raíz de su árbol.
Esta solución tiene el beneficio de ser extraordinariamente fácil de implementar. Se diferencia de la solución de mattdlong hecho de que:
- Su solución elimina la selección de todos los otros elementos cuando se hace clic en un elemento, así que hay que pulsar la tecla Ctrl artículos multiselección.
- Con esta solución, un solo clic seleccionará/deseleccionará el elemento sobre el que hizo clic, pero no hay forma de seleccionar rápidamente un elemento y simultáneamente anular la selección de todos los demás.
Otra diferencia es que la navegación del teclado (teclas de flecha) en su solución anula la selección de todos los elementos, mientras que en esta solución la navegación por el teclado no anula la selección de elementos.
Debe elegir entre estas soluciones en función de la semántica que prefiera (un solo clic para agregar el elemento vs ctrl-clic para agregar el elemento, etc.). Si desea una semántica más avanzada, como Shift-Click, etc., es relativamente de agregar.
Tenga en cuenta que también puede TreeViewItems estilo personalizado utilizando un ToggleButton
o CheckBox
en cualquier parte del ItemContainerTemplate
que tiene Checked={Binding IsSelected}
. Esto permite al usuario seleccionar elementos haciendo clic en ToggleButton
o CheckBox
.
Tome un vistazo a esta discusión: http://stackoverflow.com/questions/459375/customizing-the-treeview-to-allow-multi-select/9297158#9297158 –
Compruebe mi respuesta aquí: http://stackoverflow.com/a/13412801/166452 –