Is het mogelijk dat Drag and Drop gebeurtenissen in WPF niet vuren betrouwbaar?

stemmen
-1

Ik vraag me af of D & D events niet altijd vuren (DragLeave / DragEnter).

Ik implementeerde een D & D-functie in mijn WPF GUI. Tijdens het slepen een element rond Ik dragleave 'een GUI-element. Normaal gesproken vuurt een geschikte 'DragLeave' event, maar niet altijd. Ik vrees, dat voor sommige snelheid redenen soms zijn deze gebeurtenissen krijgen niet betrouwbaar ontslagen. Als dat het geval is, hoe kan ik dit probleem op te lossen?

De vraag is gesteld op 09/10/2019 om 13:00
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Korte versie: Ik schreef enkele sample app om het te controleren mezelf - en ja - het DragLeave evenement is niet betrouwbaar ontslagen.

Lange versie:

Wat ik deed:

Ik plaatste een Labelals verplaatsbare object in een StackPanel. Dan geïmplementeerd ik de code voor de MouseMoveen DragLeaveevenementen. Een extra TextBlock- toegevoegd aan de StackPanelen - diende als uitvoerbestand. Als de DragLeavehandler wordt aangeroepen, veranderde ik Text Propertyvan de TextBlocktot ' DragLeave opgetreden '. Daarna testte ik het slepen van de Labelrichting van de StackPanel.

Wat ik herkende:

Als ik snel genoeg of drukte op de muisknop in de buurt van de grens van het Label, het DragLeavewas event niet ontslagen. Als ik deed het langzaam , alles werkte prima zoals verwacht.

Wat ik tot de conclusie:

Ik denk dat, als de muis verlaat het Labelvoor de ' DoDragDrop' thread wordt geactiveerd, wordt het evenement niet ontslagen, omdat de muis is al buiten het Label. Dus is er een kleine glitch tussen het starten van de D & D en het afvuren van het eerste evenement.

Men kan hetzelfde gedrag in het zien DragOver/MouseMovehandler. Hoe sneller je de muis beweegt, hoe minder punten (e.GetPosition (...)) kunt u vastleggen in de event handler.

Het probleem is, dat voor de DragLeavedat ontbrekende gebeurtenis kan kritisch zijn, aangezien het slechts één keer wordt ontslagen. Echter, het DragOveris gebeurtenis vaak afgevuurd tijdens een te slepen en een ontbrekende gebeurtenis kan worden gecompenseerd door de volgende DragOvergebeurtenis direct na afloop.

antwoordde op 10/10/2019 om 14:51
bron van user

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