Comment mettre à jour la position d'un glisser-ornement au cours de WPF drag-n-drop?
Je suis à l'aide d'un décorateur pour montrer un "fantôme" de l'élément glissé...
var adornerLayer = AdornerLayer.GetAdornerLayer(topLevelGrid);
dragAdorner = new DragAdorner(topLevelGrid, itemToDrag);
adornerLayer.Add(dragAdorner);
dragAdorner.UpdatePosition(e.GetPosition(topLevelGrid));
DragDrop.DoDragDrop(sourceItems, viewModel, DragDropEffects.Move);
adornerLayer.Remove(dragAdorner);
itemToDrag = null;
...mais je ne peux pas trouver une belle façon de mettre à jour la position de l'ornement au cours de la traînée. Le plus proche que j'ai est par la mise en AllowDrop="true"
sur le premier niveau de la grille et de lui donner une DragOver gestionnaire...
private void TopLevelGrid_OnDragOver(object sender, DragEventArgs e)
{
dragAdorner.UpdatePosition(e.GetPosition(topLevelGrid));
}
Mais cela signifie que je n'ai pas le bon DragDropEffects
des commentaires sur le curseur, c'est à dire, il indique toujours l' DragDropEffects.Move
le curseur au lieu de DragDropEffects.None
jusqu'à ce que je suis au-dessus d'une baisse effective de la cible.
Quelqu'un sait-il une meilleure façon de mettre à jour l'ornement de position?
OriginalL'auteur IanR | 2010-01-19
Vous devez vous connecter pour publier un commentaire.
Il y a cette (malheureusement uniquement disponible en version mise en cache) assez vieux billet de blog de Bea Stollnitz, qui couvre assez bien votre question. Il a une belle mise en œuvre de drag n drop avec un décorateur montrant une "image fantôme".
Fondamentalement glisser et déposer dans WPF est assez compliquer la procédure - si vous voulez un peu personnalisé DragAdorners - consiste en l'ajout d'une bande de joint de dépendance des propriétés de configuration de la gestion de tous les événements et surtout pour l'affichage de l'ornement de manière à ne pas interférer avec la chute du code.
Du Bea code fonctionne en ayant une classe d'assistance qui définit le propriétaire
Window
'sDragOver
gestionnaire d'événement etAllowDrop
droite avant l'opération de glisser /déposer, de cette façon, vous pouvez contrôler toutes les déplacement entre le réel glisser la source et la cible de dépôt.OriginalL'auteur Markus Hütter
Donc, en regardant de plus près Bea code que redoced faisait allusion...
J'ai toujours
AllowDrop="true"
sur le premier niveau de la grille et de lui donner un DragOver gestionnaire où je puisse mettre à jour l'ornement de position, mais j'ai également réglé le DragDropEffects à Aucune ici. Ensuite, j'ai juste besoin d'ajouter un DragOver gestionnaire de la baisse effective de cible également de mettre à jour l'ornement de position...et assurez-vous de définire.Handled = true
de sorte que le haut niveau de la grille du gestionnaire n'est pas seulement de définir les effets de retour à Aucun quand je suis sur une cible de dépôt...OriginalL'auteur IanR