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 direktivuName 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 FriendWithEvents 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é