Este posibil ca Trageți și plasați evenimente în WPF nu sunt de tragere de încredere?

voturi
-1

Mă întreb dacă evenimentele D & D nu se declanșează întotdeauna (DragLeave / DragEnter).

Am implementat o caracteristică D & D în GUI meu WPF. În timp ce glisarea un element în jurul valorii de I 'dragleave' un element GUI. În mod normal, declanșează un eveniment adecvat „DragLeave“, dar nu întotdeauna. Mă tem, că pentru unele motive de viteză, uneori, aceste evenimente nu concediat de încredere. Dacă acesta este cazul, cum pot depăși aceste probleme?

Întrebat 09/10/2019 la 13:00
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Short Versiune: Am scris unele aplicații eșantion pentru a verifica mine - și da - evenimentul DragLeave nu este tras de încredere.

Versiune pe termen lung:

Ce am facut:

Am plasat o Labelca obiect draggable în interiorul unui StackPanel. Apoi am implementat codul pentru MouseMoveși DragLeaveevenimente. O cantitate suplimentară TextBlock- adăugată la StackPanelcât și - a servit ca ieșire eveniment. În cazul în care DragLeavehandler este chemat, am schimbat Text PropertyDIRECTIVEI TextBlockla „ DragLeave a avut loc “. Apoi am testat - o Glisarea Labelspre StackPanel.

Ceea ce am recunoscut:

Dacă am fost rapid suficient sau apăsat butonul mouse - ului aproape de frontiera Label, DragLeaveevenimentul a fost nu a concediat. Dacă am făcut - o încet , totul a mers bine cum era de așteptat.

Ceea ce am concluziona:

Cred că, în cazul în care mouse - ul părăsește Labelînainte ca „ DoDragDropeste inițiată“ firul, evenimentul nu este concediat, deoarece mouse - ul este deja în afara UE Label. Deci , există o mică eroare între pornirea D & D și arderea primului eveniment.

Se poate vedea același comportament în DragOver/MouseMovehandler. Cu cât mai repede vă mutați mouse - ul, mai puține puncte (e.GetPosition (...)) puteți captura în tratare a evenimentelor.

Problema este, că pentru DragLeaveacel eveniment lipsă poate fi critic, deoarece este tras doar o singură dată. Cu toate acestea, DragOverevenimentul este tras de foarte multe ori în timpul unei Glisarea și un eveniment de lipsă poate fi echilibrat de următorul DragOvereveniment imediat după aceea.

Publicat 10/10/2019 la 14:51
sursa de către utilizator

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