Wpf, Evenimente Routed

Fiecare dezvoltator care lucrează în .NET, este familiarizat cu conceptul evenimentului: acesta este un mesaj care este trimis la un obiect (de exemplu, un element de WPF) pentru o notificare cod care era ceva important. WPF completează modelul evenimentului .NET cu un nou concept de rutare a evenimentelor. Routing permite evenimente au loc într-un singur element, astfel cum a generat într-un alt exemplu, făcând clic pe un buton din bara de instrumente din bara de instrumente este generat, și apoi cuprinzând panoul de fereastră, și numai apoi se transmite codul de procesare.







Evenimentele cu traseu sunt evenimente cu capacități mari de transport: se pot tunel în jos și se pot răspândi cu bule în sus pe arborele elementelor și pe calea lansatoarelor de manipulatori de evenimente. Evenimentele de rutare vă permit să procesați un eveniment într-un element (de exemplu, într-o etichetă), deși a provenit dintr-un alt element (de exemplu, într-o imagine din interiorul acestei etichete). Ca și în cazul proprietăților de dependență, puteți utiliza evenimentele rotative în mod tradițional - prin conectarea unui handler de evenimente cu semnătura dorită - dar totuși trebuie să înțelegeți principiile de funcționare a acestora pentru a le utiliza toate capabilitățile.

Rutarea evenimentului vă permite să scrieți un cod concis și ușor de înțeles care să poată gestiona evenimentele în locul cel mai convenabil pentru el. De asemenea, este necesar să lucrați cu modelul de conținut WPF, care vă permite să creați elemente simple (cum ar fi butoanele) din zeci de ingrediente individuale, fiecare cu un set propriu de evenimente.

Modelul de eveniment WPF este foarte similar cu modelul proprietății WPF. Ca proprietăți de dependență, evenimentele direcționate sunt reprezentate ca câmpuri statice numai pentru citire care sunt înregistrate într-un constructor static și sunt formatate ca o definiție standard a evenimentului .NET.

De exemplu, clasa WPF Button oferă un eveniment familiar Click, care este un descendent al clasei abstracte ButtonBase. Următoarea este modul în care este definit și înregistrat acest eveniment:

Proprietăți în funcție înregistrată de DependencyProperty.Register () metoda, și EventManager.RegisterRoutedEvent metoda () este proiectat pentru înregistrarea evenimentelor rutate. În cazul în care înregistrarea evenimentului este necesar să se precizeze numele evenimentului, tipul de rutare (mai mult pe acest lucru mai târziu), delegatul care definește sintaxa handler evenimentului (în acest exemplu RoutedEventHandler), și clasa căreia îi aparține evenimentul (în acest exemplu ButtonBase).







De obicei, evenimentele rutate sunt ambalate în evenimente .NET convenționale pentru a le face disponibile pentru toate limbile .NET. Evenimente tecii adaugă și elimină apelanții înregistrate folosind AddHandler () și RemoveHandler (), care sunt definite în clasa de bază și moștenite FrameworkElement fiecare element WPF.

Ca și în cazul proprietăților în funcție, determinarea dirijate de evenimente pot fi partajate de mai multe clase. De exemplu, MouseUp eveniment folosind două clase de bază: UIElement (punct de pornire pentru elementele convenționale WPF) și ContentElement (- piesele individuale de conținut care pot fi plasate în fluxul de documente punct pentru elementele de conținut de pornire). eveniment MouseUp definit în clasa System.Windows.Input.Mouse. clase UIElement și ContentElement pur și simplu utilizați cu metoda RoutedEvent.AddOwner ():

Generarea unui eveniment tras

Desigur, ca orice eveniment, clasa definitorie trebuie să genereze un eveniment rutat undeva. Unde exact - aici sunt detaliile implementării. Cu toate acestea, rețineți că evenimentul dvs. nu este declanșat prin intermediul wrapper-ului tradițional .NET. În schimb, se utilizează metoda RaiseEvent (), moștenită de fiecare element din clasa UIElement. Mai jos este codul ButtonBase corespunzător:

Metoda RaiseEvent () este responsabilă pentru generarea unui eveniment pentru fiecare apelant care a fost înregistrat utilizând metoda AddHandler (). Deoarece această metodă este publică, obiectele apelante au o alegere: se pot înregistra direct utilizând metoda AddHandler () sau pot folosi shell-ul evenimentului.

În ambele cazuri, ele vor fi notificate când se va apela metoda RaiseEvent (). Toate evenimentele WPF respectă condiția familiară despre semnăturile evenimentelor care există în .NET. Primul parametru al fiecărui handler de evenimente conține o referință la obiectul care a generat evenimentul (expeditor). Al doilea parametru este obiectul EventArgs, care combină toate detaliile suplimentare de care aveți nevoie.

De exemplu, evenimentul MouseUp oferă un obiect MouseEventArgs care arată ce buton mouse-ului a fost apăsat atunci când a apărut un eveniment.

În aplicațiile Windows Forms, pentru multe evenimente, clasa de bază EventArg a fost de obicei utilizată dacă nu au nevoie să transmită informații suplimentare. În aplicațiile WPF, situația este diferită, deoarece acestea susțin un model de evenimente rutate.

Dacă evenimentul nu are nevoie să trimită informații suplimentare, atunci în WPF utilizează clasa RoutedEventArgs. care conține informații despre rutarea evenimentului. Dacă evenimentul trebuie să transmită informații suplimentare, acesta utilizează un obiect mai specializat, produs de RoutedEventArgs. Deoarece fiecare clasă de argumentare a evenimentului WPF este generată de RoutedEventArgs, fiecare manipulator de evenimente WPF are acces la informații despre rutarea evenimentelor.







Articole similare

Trimiteți-le prietenilor: