Náhled událostí
Události náhledu, také známé jako události tunelování, jsou směrované události, u kterých směr trasy vede od kořene aplikace k elementu, který událost vyvolal, a jsou označeny jako zdroj v datech události. Ne všechny scénáře událostí podporují nebo vyžadují události ve verzi Preview; Toto téma popisuje situace, kdy existují události ve verzi Preview, způsob, jakým by je aplikace nebo komponenty měly zpracovávat, a případy, kdy vytváření událostí ve verzi Preview ve vlastních komponentách nebo třídách může být vhodné.
Náhled událostí a vstupu
Při obecném zpracování událostí ve verzi Preview buďte opatrní při označování událostí zpracovávaných v datech událostí. Zpracování události Preview u jakéhokoli prvku jiného než toho, který ji vyvolal (prvek, který je uveden jako zdroj v datech události), způsobuje, že tento prvek nemá možnost zpracovat událost, z níž pochází. Někdy se jedná o požadovaný výsledek, zejména pokud příslušné prvky existují v relacích v rámci vytváření ovládacího prvku.
U vstupních událostí konkrétně události Preview také sdílejí instance dat událostí s těmito ekvivalentními bublajícími událostmi. Pokud použijete obslužnou rutinu třídy událostí ve verzi Preview k označení vstupní události zpracovávané, obslužná rutina vstupní třídy událostí bublání nebude vyvolána. Nebo pokud použijete obslužnou rutinu instance náhledu ke označení události jako vyřízené, obslužné rutiny pro bublající událost se obvykle nevyvolají. Obslužné rutiny třídy nebo instance lze zaregistrovat nebo připojit s možností vyvolání, i když je událost již označena jako zpracovaná, avšak tato technika se často nepoužívá.
Další informace o zpracování tříd a o tom, jak souvisí s událostmi verze Preview, najdete v tématu označení směrovaných událostí jako zpracovaných a zpracování tříd.
Řešení potlačení událostí pomocí ovládacích prvků
Jeden scénář, ve kterém se události Preview běžně používají pro zpracování kompozitních vstupních událostí. Někdy autor ovládacího prvku potlačí určitou událost pocházející ze svého ovládacího prvku, možná tak, aby nahradil událost definovanou komponentou, která obsahuje více informací nebo implikuje konkrétnější chování. Například Windows Presentation Foundation (WPF) Button potlačí MouseLeftButtonDown a MouseRightButtonDown bublinové události vyvolané Button nebo jeho složenými prvky ve prospěch zachycení myši a vyvolání Click události, která je vždy vyvolána samotným Button. Událost a její data i nadále postupují podél trasy, ale protože Button označuje data události jako Handled, jsou spuštěny pouze ty obslužné rutiny události, které výslovně uvedly, že by měly jednat v případě handledEventsToo
. Pokud jiné prvky směrem ke kořenové části vaší aplikace stále chtěly možnost zpracovat událost potlačenou řízením, jednou z možností je připojit obslužné rutiny v kódu s handledEventsToo
specifikovanými jako true
. Často je ale jednodušší technikou změnit směr směrování, který zpracováváte, aby byl ekvivalentem vstupní události ve verzi Preview. Pokud například ovládací prvek potlačí MouseLeftButtonDown, zkuste místo toho připojit obslužnou rutinu pro PreviewMouseLeftButtonDown. Tato technika funguje pouze pro vstupní události základního elementu, jako je MouseLeftButtonDown. Tyto vstupní události používají dvojice tunel/bublina, vyvolávají oba typy událostí a sdílejí data události.
Každá z těchto technik má vedlejší účinky nebo omezení. Vedlejším účinkem zpracování události preview je, že zpracování události v daném okamžiku může zakázat obslužné rutiny, které očekávají zpracování bublinové události, a proto omezení je, že obvykle není vhodné označit událost zpracovávanou, zatímco je stále v části preview trasy. Omezení handledEventsToo
techniky spočívá v tom, že nelze zadat obslužnou rutinu handledEventsToo
v XAML jako atribut, je nutné zaregistrovat obslužnou rutinu události v kódu po získání odkazu na objekt na prvek, kde je obslužná rutina připojena.
Viz také
.NET Desktop feedback