Est-il possible que les événements de glisser-déposer dans WPF ne sont pas fiables tirent?

voix
-1

Je me demande si les événements D & D tir pas toujours (DragLeave / DragEnter).

Je mis en place un dispositif D & D dans mon interface graphique WPF. Tout en faisant glisser un élément autour Je DragLeave 'un élément graphique. Normalement, il déclenche un événement approprié « DragLeave », mais pas toujours. Je crains que, pour des raisons de vitesse parfois ces événements sont pas tirés fiables. Si tel est le cas, comment puis-je surmonter problème?

Créé 09/10/2019 à 13:00
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Version courte: j'ai écrit une exemple d' application pour vérifier moi - même - et oui - l'événement DragLeave ne se déclenche pas fiable.

Version longue:

Ce que j'ai fait:

Je placé une Labelforme d' un objet déplaçable à l' intérieur d' un StackPanel. Ensuite , je mis en œuvre le code de la MouseMoveet des DragLeaveévénements. Un montant supplémentaire TextBlock- ajouté à la StackPanelmême - servi en sortie de l' événement. Si le DragLeavegestionnaire est appelé, je l' ai changé le Text Propertydu TextBlockà ' DragLeave est survenue . Ensuite je l' ai testé en faisant glisser le Labelvers le StackPanel.

Ce que je reconnus:

Si j'étais rapide assez ou appuyé sur le bouton de la souris près de la frontière du Label, l' DragLeaveévénement a été pas tiré. Si je l' ai fait lent , tout fonctionnait bien comme prévu.

Ce que je conclus:

Je suppose que , si la souris quitte le Labelavant le « DoDragDropfil » est lancé, l'événement ne se déclenche pas, puisque la souris est déjà en dehors de la Label. Donc , il y a un petit pépin entre le début de la D & D et la mise à feu du premier événement.

On peut voir le même comportement dans le DragOver/MouseMovegestionnaire. Plus vite vous déplacez la souris, le moins de points (e.GetPosition (...)) , vous pouvez capturer dans le gestionnaire d'événements.

Le problème est que pour le DragLeavecet événement manquant peut être critique, car il est seulement tiré une fois. Cependant, l' DragOverévénement est déclenché très souvent lors d' un événement traînage et un manque peut être compensé par le prochain DragOverévénement directement après.

Créé 10/10/2019 à 14:51
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more