Zpracování událostí v jazyku Visual Basic a WPF
Pro jazyk .NET jazyka Microsoft Visual Basic můžete použít klíčové slovo specifické pro Handles
jazyk přidružit obslužné rutiny událostí k instancím místo připojení obslužných rutin událostí s atributy nebo pomocí AddHandler metody. Handles
Technika připojení obslužných rutin k instancím má ale určitá omezení, protože Handles
syntaxe nemůže podporovat některé konkrétní funkce směrovaných událostí systému událostí WPF.
Použití popisovačů v aplikaci WPF
Obslužné rutiny událostí, které jsou připojené k instancím a událostem, Handles
musí být definovány v rámci částečné deklarace třídy instance, což je také požadavek na obslužné rutiny událostí, které jsou přiřazeny prostřednictvím hodnot atributů prvků. Pro prvek na stránce, který má hodnotu vlastnosti (nebo deklarovanou direktivu Name x:Name), můžete zadat Handles
pouze prvek. Důvodem je to, že Name jazyk XAML vytvoří odkaz na instanci, který je nezbytný pro podporu formátu odkazu Instance.Event vyžadovaného Handles
syntaxí. Jediný prvek, pro který lze použít Handles
bez Name odkazu, je root-element instance, která definuje částečnou třídu.
Stejnou obslužnou rutinu můžete přiřadit více prvků oddělením odkazů Instance.Event za Handles
čárkami.
Můžete použít Handles
k přiřazení více než jedné obslužné rutiny ke stejnému odkazu Instance.Event. Nepřiřazovat žádnou důležitost pořadí, ve kterém jsou obslužné rutiny uvedeny v Handles
odkazu. Měli byste předpokládat, že obslužné rutiny, které zpracovávají stejnou událost, lze vyvolat v libovolném pořadí.
Chcete-li odebrat obslužnou rutinu přidanou v Handles
deklaraci, můžete volat RemoveHandler.
Můžete použít Handles
k připojení obslužných rutin pro směrované události, pokud připojíte obslužné rutiny k instancím, které definují událost zpracovávanou v tabulkách členů. U směrovaných událostí se obslužné rutiny, které jsou připojené Handles
, řídí stejná pravidla směrování jako obslužné rutiny připojené jako atributy XAML nebo se společným podpisem AddHandler. To znamená, že pokud je událost již označena ( Handled vlastnost v datech události je True
), obslužné rutiny připojené k Handles
této instanci události se nevyvolají v reakci na tuto instanci události. Událost může být označena obslužnými rutinami instance na jiném prvku v trase, nebo pomocí třídy, která zpracovává aktuální prvek nebo dřívější prvky podél trasy. U vstupních událostí, které podporují spárované události tunelu nebo bublin, je možné, že trasa tunelového propojení označila spárovanou dvojici událostí. Další informace o směrovaných událostech najdete v tématu Přehled směrovaných událostí.
Omezení popisovačů pro přidávání obslužných rutin
Handles
Aplikace nemůže odkazovat na obslužné rutiny pro připojené události. Pro danou připojenou událost musíte použít metodu add
accessor nebo atributy události typename.eventname v XAML. Podrobnosti najdete v tématu Přehled směrovaných událostí.
U směrovaných událostí můžete přiřadit Handles
obslužné rutiny pouze pro instance, kde tato událost existuje v tabulce členů instance. Obecně však s směrovanými událostmi může nadřazený element být naslouchací proces události z podřízených elementů, i když nadřazený prvek nemá tuto událost ve své tabulce členů. V syntaxi atributu můžete tuto možnost zadat prostřednictvím formuláře atributu typename.membername , který kvalifikuje, který typ skutečně definuje událost, kterou chcete zpracovat. Například nadřazený Page
objekt (bez Click
definované události) může naslouchat událostem kliknutí na tlačítko přiřazením obslužné rutiny atributu ve formuláři Button.Click
. Nepodporuje však Handles
formulář typename.membername, protože musí podporovat konfliktní formulář Instance.Event. Podrobnosti najdete v tématu Přehled směrovaných událostí.
Handles
Aplikace nemůže připojit obslužné rutiny, které jsou vyvolány pro události, které jsou již označeny jako zpracované. Místo toho je nutné použít kód a volat handledEventsToo
přetížení AddHandler(RoutedEvent, Delegate, Boolean).
Poznámka:
Syntaxi v kódu jazyka Handles
Visual Basic nepoužívejte, pokud zadáte obslužnou rutinu události pro stejnou událost v jazyce XAML. V tomto případě se obslužná rutina události volá dvakrát.
Jak WPF implementuje funkci "Handles" (Popisovače)
Při kompilaci stránky XAML (Extensible Application Markup Language), zprostředkující soubor deklaruje Friend
WithEvents
odkazy na každý prvek na stránce, který má Name sadu vlastností (nebo x:Name Direktiva deklarována). Každá pojmenovaná instance je potenciálně element, který lze přiřadit obslužné rutině prostřednictvím Handles
.
Poznámka:
V sadě Visual Studio vám IntelliSense umožňuje zobrazit dokončení, pro které prvky jsou k dispozici pro Handles
odkaz na stránce. To však může trvat jeden průchod kompilace, aby zprostředkující soubor mohl naplnit všechny Friends
odkazy.
Viz také
.NET Desktop feedback