2010-06-05 4 views
1

Je gère les événements de glisser-déposer dans un TreeView en utilisant PreviewMouseDown, PreviewMouseMove et PreviewMouseUp, cependant, il y a un problème.WPF TreeView glisser-déposer en utilisant l'aperçu

Dans mon gestionnaire PreviewMouseDown, je prépare tout en cas de démarrage d'un glissement (détecté dans l'événement Déplacer), mais j'ai défini e.Handled = true. Cela signifie que les événements de sélection standard ne sont pas générés sur mon arbre! Ce que je veux être capable de faire dans mon événement Up est d'invoquer l'événement standard de sélection d'arborescence standard - sauf que je ne peux pas appeler des événements en dehors de l'arborescence. Alors, quelle est la bonne façon de faire cela? J'ai essayé d'utiliser les événements MouseDown, MouseMove et MouseUp standard, mais il y a un problème avec le fait de déconner ma fonction de sélection multiple, ce qui signifie que j'ai besoin d'utiliser la version Preview de ces événements.

Répondre

1

Ma solution pour cela est de ne pas utiliser les gestionnaires de prévisualisation, à la place, j'utilise MouseDown, MouseMove et MouseUp.

La séquence des événements est:

* MouseDown (set up for possible drag) 
* SelectionChanged (remember any selection change) 
* MouseMove (here we might go into a drag operation) 
* MouseUp (if we went into a drag operation, all done, otherwise process the multiple selection stuff) 
+0

L'événement SelectionChanged ne vous dit pas si vous cliquez sur le même article deux fois. Cela rend CTRL-Click difficile si vous voulez basculer la sélection sur le même élément. – imekon

+0

pourriez-vous ajouter du code ici pour montrer comment cela fonctionne? Merci. – Danield