Gestione degli eventi di Visual Basic e WPF (WPF .NET)
Se si sta codificando in Visual Basic .NET, è possibile usare la parola chiave Handles specifica del linguaggio per associare un gestore eventi a un oggetto. L'oggetto può essere un'istanza nel code-behind o un elemento nel linguaggio XAML (Extensible Application Markup Language).
Handles
può essere usato per assegnare gestori di eventi per eventi CLR (Common Language Runtime) o eventi indirizzatidi Windows Presentation Foundation (WPF). Tuttavia, Handles
presenta alcune limitazioni di utilizzo quando viene usato per collegare gestori di eventi per gli eventi indirizzati.
Prerequisiti
L'articolo presuppone una conoscenza di base degli eventi indirizzati e che tu abbia letto la panoramica degli eventi indirizzati. Per seguire gli esempi in questo articolo, è utile se si ha familiarità con Extensible Application Markup Language (XAML) e si sa come scrivere applicazioni Windows Presentation Foundation (WPF).
Sintassi
La sintassi per una dichiarazione di <event name>
su un oggetto specificato da <object name>
. L'evento deve essere un membro della classe o della classe base dell'oggetto. L'esempio seguente illustra come associare un gestore eventi a un elemento XAML usando 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
Per usare Handles
con un oggetto definito nel code-behind, in genere si dichiara l'oggetto usando la parola chiave WithEvents. Per altre informazioni sull'utilizzo di WithEvents
, vedere questi esempi di . WPF dichiara automaticamente tutti gli elementi XAML usando Friend WithEvents
. Nell'esempio seguente viene illustrato come dichiarare un oggetto definito nel code-behind usando 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
Per usare lo stesso gestore per più eventi, separare da virgole gli eventi <object name>.<event name>
. Ad esempio, Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click
. L'ordine degli eventi delimitati da virgole è irrilevante.
È possibile assegnare gestori diversi per lo stesso evento con più istruzioni Handles
. L'ordine delle istruzioni Handles
non determina l'ordine in cui i gestori vengono richiamati quando si verifica l'evento.
Suggerimento
Per rimuovere un gestore aggiunto con Handles
, chiamare RemoveHandler. Ad esempio, RemoveHandler Button1.Click, AddressOf Button1_Click
.
Uso di "Handle" in un'applicazione WPF
Per un oggetto definito in XAML, la Handle sintassi degli eventi <object name>.<event name>
richiede che l'elemento XAML che rappresenta l'oggetto abbia una proprietà Name o x:Name. Tuttavia, un attributo 'name' non è necessario per l'elemento radice della pagina XAML, puoi utilizzare il nome Me
. L'esempio seguente illustra come associare un gestore eventi a una radice di pagina XAML usando 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
Quando viene compilata una pagina XAML, ogni elemento XAML con un parametro Name
o x:Name
viene dichiarato come Friend WithEvents
. Di conseguenza, puoi usare qualsiasi elemento XAML con Handles
.
Suggerimento
Visual Studio IntelliSense mostra gli oggetti che possono essere usati con Handles
.
Indipendentemente dal fatto che si allega un gestore eventi usando
Nota
Non usare entrambi gli attributi XAML e Handles
per associare lo stesso gestore eventi allo stesso evento. In caso contrario, il gestore eventi verrà chiamato due volte per ogni evento.
Limitazioni
La parola chiave handle di
È possibile utilizzare
Handles
solo per associare un gestore eventi a un oggetto se l'evento è un membro della classe o della classe base dell'oggetto. Ad esempio, è possibile usareHandles
per associare un gestore di eventi Click a un pulsante la cui classe base ButtonBase genera l'evento instradatoClick
. Tuttavia, una delle funzionalità di eventi indirizzati è che attraversano l'albero degli elementi, che consente di ascoltare e gestire un eventoClick
a un livello superiore rispetto all'elemento che l'ha generata. Un evento instradato per cui un elemento padre è in ascolto e gestisce è chiamato evento allegato .Handles
non può essere usato per gli eventi associati perché la sintassi non supporta la specifica di un listener diverso nell'albero degli elementi XAML rispetto all'elemento che ha generato l'evento. Per assegnare gestori eventi per gli eventi associati, dovrai usare la sintassi degli attributi XAML o il metodo AddHandler. Per ulteriori informazioni sugli eventi allegati, vedere Panoramica degli eventi allegati e Eventi allegati in WPF.La sintassi di
Handles
non supporta l'invocazione di gestori di eventi per gli eventi Handled. Per consentire al gestore eventi di essere richiamato per gli eventi diHandled
, collegare il gestore eventi usando il metodo AddHandler(RoutedEvent, Delegate, Boolean) e impostarne il parametrohandledEventsToo
sutrue
.
Vedere anche
.NET Desktop feedback