Gestione degli eventi di Visual Basic e WPF (WPF .NET)
Se si sta codificando in Visual Basic .NET, è possibile usare la parola chiave Handle 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 eventi per eventi CLR (Common Language Runtime) o eventi indirizzati di Windows Presentation Foundation (WPF). Tuttavia, Handles
presenta alcune limitazioni di utilizzo quando viene usato per collegare gestori eventi per gli eventi indirizzati.
Prerequisiti
L'articolo presuppone una conoscenza di base degli eventi indirizzati e di aver letto 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 Sub
dichiarazione che usa la parola chiave Handle è: Sub <procedure name> Handles <object name>.<event name>
. Tale sintassi definisce una routine come gestore eventi che verrà eseguita quando viene generato un evento specificato da <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 WithEvents
, vedere questi esempi. 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 gli <object name>.<event name>
eventi da virgole. 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ù Handles
istruzioni. L'ordine Handles
delle istruzioni 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 sintassi <object name>.<event name>
degli eventi Handle richiede che l'elemento XAML che rappresenta l'oggetto abbia una Name proprietà o x:Name. Tuttavia, non è necessaria una proprietà name per l'elemento radice della pagina XAML, per cui è possibile usare il nome Me
. L'esempio seguente mostra 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 Name
parametro 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 Handles
, la sintassi dell'attributo XAML, l'istruzione AddHandler o il AddHandler metodo , il comportamento del sistema eventi è lo stesso.
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.
Limiti
La parola chiave Handle presenta queste limitazioni di utilizzo:
È 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 Click gestore eventi a un pulsante la cui classe ButtonBase di base genera l'eventoClick
indirizzato. Tuttavia, una delle funzionalità degli eventi indirizzati consiste nel fatto che attraversano l'albero degli elementi, che consente di ascoltare e gestire unClick
evento a un livello superiore rispetto all'elemento che l'ha generata. Un evento indirizzato per cui un elemento padre è in ascolto e handle viene chiamato evento associato.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 AddHandler metodo . Per altre informazioni sugli eventi associati, vedere Panoramica degli eventi associati ed Eventi associati in WPF.Handles
la sintassi non supporta la chiamata del gestore eventi per Handled gli eventi. Per abilitare il gestore eventi da richiamare perHandled
gli eventi, collegare il gestore eventi usando il metodo e impostarnehandledEventsToo
il AddHandler(RoutedEvent, Delegate, Boolean) parametro sutrue
.
Vedi anche
.NET Desktop feedback