Zpracování událostí jazyka Visual Basic a WPF (WPF .NET)
Pokud kódujete v jazyce Visual Basic .NET, můžete k objektu připojit obslužnou rutinu události pomocí klíčového slova Popisovače specifické pro jazyk. Objekt může být instancí v kódu za kódem nebo elementem jazyka XAML (Extensible Application Markup Language). Handles
lze použít k přiřazení obslužných rutin událostí pro události CLR (Common Language Runtime) nebo události směrované službou Windows Presentation Foundation (WPF). Při Handles
připojování obslužných rutin událostí pro směrované události ale platí určitá omezení použití.
Požadavky
V článku se předpokládá základní znalost směrovaných událostí a že jste si přečetli přehled směrovaných událostí. Pokud chcete postupovat podle příkladů v tomto článku, pomůže vám to, pokud znáte jazyk XAML (Extensible Application Markup Language) a víte, jak psát aplikace WINDOWS Presentation Foundation (WPF).
Syntaxe
Syntaxe deklarace Sub
, která používá klíčové slovo Handles , je: Sub <procedure name> Handles <object name>.<event name>
. Tato syntaxe určuje proceduru jako obslužnou rutinu události, která se spustí, když je vyvolána událost určená <event name>
objektem určeným <object name>
. Událost musí být členem třídy objektu nebo základní třídy. Následující příklad ukazuje, jak připojit obslužnou rutinu události k elementu XAML pomocí Handles
.
' Click event handler attached to XamlButton using Handles.
Private Sub XamlButton_Click(sender As Object, e As RoutedEventArgs) Handles XamlButton.Click
' Handler logic.
Debug.WriteLine($"Click event handler attached to XamlButton using Handles.")
End Sub
Chcete-li použít Handles
s objektem definovaným v kódu na pozadí, obvykle deklarujete objekt pomocí klíčového slova WithEvents . Další informace o WithEvents
využití najdete v těchto příkladech. WPF automaticky deklaruje všechny elementy XAML pomocí Friend WithEvents
. Následující příklad ukazuje, jak deklarovat objekt definovaný v kódu pomocí .WithEvents
' Declare a new button using WithEvents.
Dim WithEvents CodeButton As New Button With {
.Content = "New button",
.Background = Brushes.Yellow
}
' Click event handler attached to CodeButton using Handles.
Private Sub CodeButton_Click(sender As Object, e As RoutedEventArgs) Handles CodeButton.Click
' Handler logic.
Debug.WriteLine($"Click event handler attached to CodeButton using Handles.")
End Sub
Chcete-li použít stejnou obslužnou rutinu pro více událostí, oddělte <object name>.<event name>
tyto události čárkami. Například Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click
. Pořadí událostí oddělených čárkami je neměnné.
Pro stejnou událost můžete přiřadit různé obslužné rutiny s více Handles
příkazy. Pořadí Handles
příkazů neurčí pořadí, ve kterém jsou obslužné rutiny vyvolány při výskytu události.
Tip
Chcete-li odebrat obslužnou rutinu přidanou pomocí Handles
volání RemoveHandler. Například RemoveHandler Button1.Click, AddressOf Button1_Click
.
Použití popisovačů v aplikaci WPF
U objektu definovaného v jazyce XAML vyžaduje syntaxe <object name>.<event name>
události Handles element XAML, který představuje objekt, aby měl Name vlastnost nebo x:Name. Vlastnost name však není vyžadována pro kořenový prvek stránky XAML, pro který můžete použít název Me
. Následující příklad ukazuje, jak připojit obslužnou rutinu události k kořenovému adresáři stránky XAML pomocí Handles
.
' Loaded event handler attached to the XAML page root using Handles.
Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
' Handler logic.
Debug.WriteLine($"Loaded event handler attached to Window using Handles.")
End Sub
Při kompilaci stránky XAML je každý prvek XAML s parametrem Name
x:Name
deklarován jako Friend WithEvents
. V důsledku toho můžete použít libovolný prvek XAML s Handles
.
Tip
Visual Studio IntelliSense ukazuje objekty, které lze použít s Handles
.
Bez ohledu na to, jestli připojíte obslužnou rutinu události pomocí Handles
, syntaxe atributu XAML, příkazu AddHandler nebo AddHandler metody, chování systému událostí je stejné.
Poznámka:
Nepoužívejte oba atributy XAML a Handles
připojte stejnou obslužnou rutinu události ke stejné události, jinak se obslužná rutina události zavolá dvakrát pro každou událost.
Omezení
Klíčové slovo Handles má tato omezení použití:
K objektu můžete připojit
Handles
obslužnou rutinu události pouze v případě, že je událost členem třídy objektu nebo základní třídy. Můžete například použítHandles
k připojení Click obslužné rutiny události k tlačítku, jehož základní třída ButtonBase vyvoláClick
směrovanou událost. Jednou z funkcí směrovaných událostí je ale to, že procházejí stromem prvků, který umožňuje naslouchat a zpracovávatClick
událost na vyšší úrovni než prvek, který ho vyvolal. Směrovaná událost, kterou nadřazený prvek naslouchá a zpracovává, se nazývá připojená událost.Handles
Nelze použít pro připojené události, protože její syntaxe nepodporuje zadání jiného naslouchacího procesu ve stromu elementu XAML než element, který vyvolal událost. Pokud chcete přiřadit obslužné rutiny událostí pro připojené události, budete muset použít syntaxi atributu XAML nebo metodu AddHandler . Další informace o připojených událostech naleznete v tématu Přehled připojených událostí a Připojené události ve WPF.Handles
Syntaxe nepodporuje vyvolání obslužné rutiny událostí pro Handled události. Chcete-li povolit vyvolání obslužné rutiny události proHandled
události, připojte obslužnou rutinu AddHandler(RoutedEvent, Delegate, Boolean) události pomocí metody a nastavte jehohandledEventsToo
parametr natrue
.
Viz také
.NET Desktop feedback