Wpf, irányított események

Minden fejlesztő dolgozik .NET, ismeri a koncepció az esemény: egy üzenetet küldött egy tárgyat (például egy WPF elem) a kód észre, hogy van valami fontos. A WPF kiegészíti a .NET eseménymodellt egy új esemény-útválasztási koncepcióval. Routing lehetővé események történnek egy-egy elem, mint keletkezett egy másik példa, rákattint egy eszköztár gombot az eszköztáron keletkezik, majd tartalmazó ablak panel, és csak ezután továbbítjuk a feldolgozó kódot.

Az útvonaltervezett események olyan események, amelyek nagy szállítási képességekkel rendelkeznek: alagutakba ágyazódhatnak és eloszthatják a buborékokat az elemek fa és az indító eseménykezelők útján. Az útválasztási események lehetővé teszik egy esemény feldolgozását egy elemben (például egy címkén), bár eredetileg egy másik (például egy címkén belüli képen) eredetű. A függőségi tulajdonságokhoz hasonlóan hagyományos módon is használhat útvonaltervező eseményeket - egy eseménykezelőt a kívánt aláírással összekapcsolva - de még mindig meg kell értened működésük alapelveit annak érdekében, hogy kihasználhassa az összes képességeit.

Az esemény útválasztása lehetővé teszi számodra, hogy tömör és érthető kódot írjon, amely képes kezelni az eseményeket a legkényelmesebb helyen. Szükség van továbbá a WPF tartalommodellhez való alkalmazkodásra, amely lehetővé teszi, hogy egyszerű elemek (pl. Gombok) létrehozásával több tucat egyedi összetevőből álljon, amelyek mindegyike külön eseményt tartalmaz.

A WPF eseménymodell nagyon hasonlít a WPF tulajdonságmodellhez. A függőségi tulajdonságokhoz hasonlóan a lebonyolított események statikus, csak olvasható mezőként jelennek meg, amelyeket egy statikus konstruktorban regisztrálnak, és szabványos .NET eseménydefinícióként vannak formázva.

Például a WPF-gomb osztály egy ismerős Click-eseményt kínál, amely az absztrakt ButtonBase osztály leszármazottja. A következőképpen határozzák meg és rögzítik ezt az eseményt:

Tulajdonságok állapotának függvényében felvett DependencyProperty.Register () metódus, és azt tervezték EventManager.RegisterRoutedEvent () metódust, regisztráció irányítva eseményeket. Ha az esemény regisztráció szükséges, hogy adja meg a nevét az esemény, az útvonal típusa (erről bővebben később), a meghatalmazott, amely meghatározza a szintaxis a eseménykezelő (ebben a példában RoutedEventHandler) és az osztály, amelyhez az esemény tartozik (ebben a példában ButtonBase).

Általában a lebonyolított események a normál .NET eseményekhez vannak csomagolva, hogy azok minden .NET nyelv számára elérhetővé váljanak. Az eseménycsomagoló hozzáfűzi és eltávolítja a regisztrált hívókat az AddHandler () és RemoveHandler () metódusok segítségével, amelyek a FrameworkElement alap osztályban vannak meghatározva, és amelyeket minden WPF elem örököl.

A függőségi tulajdonságokhoz hasonlóan, többféle rutint is megoszthat a rendezett események meghatározásához. Például, MouseUp esemény két alapvető osztály: UIElement (kiindulási pont a hagyományos elemek WPF) és ContentElement (kiindulási pont a tartalmi elemek - az egyes darabok tartalom lehet helyezni a dokumentumban áramlás). Az MouseUp eseményt a System.Windows.Input.Mouse osztály határozza meg. Az UIElement és a ContentElement osztályok egyszerűen használják a RoutedEvent.AddOwner () módszerrel:

Útvonalterv létrehozása

Természetesen, mint bármelyik esemény, a meghatározó osztálynak valahol el kell vezetnie egy lebonyolított eseményt. Pontosan hol van - ez a végrehajtási részletek. Ne feledje azonban, hogy az esemény nem a hagyományos .NET-esemény csomagolásán keresztül történik. Ehelyett a RaiseEvent () metódust használják, amelyet az UIElement osztály minden egyes eleme örököl. Az alábbiakban a megfelelő ButtonBase kód:

A RaiseEvent () metódus felelős minden olyan hívó számára, amely az AddHandler () módszerrel regisztrált. Mivel ez a módszer nyilvános, a hívó objektumok kapnak választási lehetőséget: közvetlenül az AddHandler () módszerrel regisztrálhatnak, vagy használhatják az eseménykészletet.

Mindkét esetben értesítést kapnak a RaiseEvent () módszer felhívásakor. Valamennyi WPF esemény megfelel a .NET-ben létező események aláírásával kapcsolatos ismerős állapotnak. Az egyes eseménykezelők első paramétere tartalmaz egy utalást az eseményt létrehozó objektumra (feladó). A második paraméter az EventArgs objektum, amely egyesíti a szükséges további részleteket.

A MouseUp esemény például MouseEventArgs objektumot tartalmaz, amely megmutatja, hogy melyik egérgombot nyomta meg egy esemény bekövetkezésekor.

A Windows Forms alkalmazásokban sok esemény esetén az EventArg alaposztályt általában használták, ha nem kellett további információkat átadniuk. A WPF-alkalmazásokban a helyzet más, mivel támogatják az átirányított események modelljét.

Ha az eseménynek nem kell további információt küldenie, akkor a WPF-ben a RoutedEventArgs osztályt használja. amely néhány információt tartalmaz az esemény útválasztásáról. Ha az eseménynek további információkat kell átadnia, akkor egy speciálisabb objektumot használ, amelyet a RoutedEventArgs hoz létre. Mivel minden WPF esemény argumentumosztály a RoutedEventArgs-ból származik, minden WPF eseménykezelő hozzáférhet az esemény útválasztási információihoz.

Kapcsolódó cikkek