WPF TreeView avec Sélection Multiple
La norme WPF affichage de l'arborescence ne prend pas en charge les sélections multiples.
Comment puis-je ajouter une arborescence qui prend en charge la sélection multiple pour mon application WPF? Les produits commerciaux sont très bien (je suis actuellement en train de conscience de la mise en œuvre commerciale - http://www.telerik.com/products/wpf/treeview.aspx)
Jetez un oeil à cette discussion: stackoverflow.com/questions/459375/...
Vérifier ma réponse ici: stackoverflow.com/a/13412801/166452
Vérifier ma réponse ici: stackoverflow.com/a/13412801/166452
OriginalL'auteur mark | 2009-07-22
Vous devez vous connecter pour publier un commentaire.
Le code ci-dessous fonctionne très bien et est beaucoup plus simple. Cependant le prix est l'utilisation de la non propriété publique, IsSelectionChangeActive, de la classe treeview. Le Code ci-dessous:
Il a quelques problèmes. L'un d'eux est que vous ne pouvez pas Ctrl+select et Ctrl+désélectionner le même élément. Je suppose que c'est parce que personne ne SelectedItemChanged événement est déclenché lorsque vous cliquez sur le même article deux fois. Je suis à la recherche en elle. Et une question ouverte est de savoir comment je peux utiliser la liaison de données à la SelectedItem avec sélection multiple.
Avez-vous réussi à résoudre le Ctrl+select et Ctrl+désélectionner bug?
Bien @LonelyPixel, avez-vous résolu ce problème?
Je ne suis pas en utilisant ce code. Le TreeViewEx projet open-source (que j'ai quelque peu modifié, mais pas encore publié) a servi comme un moyen de mieux pour moi. En gros, c'est une réécriture du contrôle TreeView avec des fonctionnalités déjà intégrées. (Et le code source est sous votre contrôle à effectuer d'autres réglages et corrections.)
OriginalL'auteur Kess
En fonction de la sémantique exacte que vous désirez, la solution peut être extrêmement simple:
Si la racine de l'arbre n'est rien mais une
TreeView
-- par exemple si c'est une simpleItemsControl
-- tous les TreeViewItems dans l'arborescence indépendante selectatble de sorte que vous obtiendrez mulitiselect gratuitement. Donc, il suffit d'utiliser uneItemsControl
au lieu d'unTreeView
pour la racine de votre arborescence.Cette solution a l'avantage d'être extrêmement simple à mettre en œuvre. Il diffère de mattdlong de la solution, à savoir que:
Une autre différence est que la navigation au clavier (touches fléchées) dans sa solution désélectionne tous les éléments, alors que dans cette solution de navigation par le clavier n'a pas de désélectionner des éléments.
Vous devriez choisir entre ces solutions basées sur la sémantique que vous préférez (seul clic pour ajouter un élément vs ctrl-clic pour ajouter un élément, etc). Si vous voulez plus avancés de la sémantique, comme Maj-Clic, etc, il est relativement à ajouter.
Notez que vous pouvez aussi personnaliser le style TreeViewItems à l'aide d'un
ToggleButton
ouCheckBox
n'importe où dans leItemContainerTemplate
qui aChecked={Binding IsSelected}
. Cela permet à l'utilisateur de sélectionner des éléments en cliquant sur leToggleButton
ouCheckBox
.Je pense que vous avez mal compris ma réponse. Ce que j'essayais de dire, c'est que TreeViewItem supporte simple multisélection hors de la boîte, de sorte vous n'avez pas à écrire quoi que ce soit. Si vous aimez le son intégré dans la multisélection sémantique que vous pouvez simplement l'utiliser. Si vous voulez quelque chose de différent que dans le haut-multiselect comportement, vous devrez soit acheter un contrôle ou d'écrire du code comme mattdlong décrit.
Quand j'ai essayer de remplacer un contrôle TreeView avec un ItemsControl, tout cela échoue avec une trace de pile plus d'une page. Un style pour un TreeViewItem ne peut pas être appliqué à ce contrôle, ou de quelque chose. Alors comment c'est censé fonctionner? Est-il encore un arbre hiérarchique de contrôle ou une liste à plat, alors? (Dans ce cas, ce serait inutile.)
Ay, un exemple de travail serait bien, Mec. Je rencontre le même problème que LonelyPixel...
À l'aide de VS 2015, je ne peux pas sélectionner
TreeViewItem
enfants d'unItemsControl
dans unTreeView
.OriginalL'auteur Ray Burns