Visual Basic e la gestione degli eventi WPF
Per il linguaggio .NET di Microsoft Visual Basic in particolare, è possibile usare la parola chiave specifica Handles
del linguaggio per associare gestori eventi alle istanze, invece di associare gestori eventi con attributi o usando il AddHandler metodo . Tuttavia, la Handles
tecnica per collegare gestori alle istanze presenta alcune limitazioni, perché la Handles
sintassi non può supportare alcune delle funzionalità specifiche degli eventi indirizzati del sistema eventi WPF.
Uso di "Handles" in un'applicazione WPF
I gestori eventi connessi a istanze ed eventi tramite Handles
devono essere definiti tutti all'interno della dichiarazione di classe parziale dell'istanza. Ciò vale anche per i gestori eventi assegnati tramite valori di attributo negli elementi. È possibile specificare Handles
solo per un elemento nella pagina con un Name valore della proprietà (o x:Name Directive dichiarato). Ciò è dovuto al fatto che in XAML crea il riferimento all'istanza Name necessario per supportare il formato di riferimento Instance.Event richiesto dalla Handles
sintassi. L'unico elemento che può essere usato per Handles
senza un Name riferimento è l'istanza dell'elemento radice che definisce la classe parziale.
È possibile assegnare lo stesso gestore a più elementi separando i riferimenti Istanza.Evento dopo Handles
con delle virgole.
È possibile usare Handles
per assegnare più gestori allo stesso riferimento Istanza.Evento. Non attribuire alcuna importanza all'ordine in cui vengono forniti i gestori nel riferimento Handles
. È necessario presupporre che gestori dello stesso evento possono essere richiamati in qualsiasi ordine.
Per rimuovere un gestore aggiunto con Handles
nella dichiarazione, è possibile chiamare RemoveHandler.
È possibile usare Handles
per collegare i gestori per gli eventi indirizzati, purché i gestori vengano collegati a istanze che definiscono l'evento gestito nelle rispettive tabelle di membri. Per gli eventi indirizzati, i gestori collegati con Handles
seguono le stesse regole di routing dei gestori associati come attributi XAML o con la firma comune di AddHandler. Ciò significa che se l'evento è già contrassegnato come gestito (la Handled proprietà nei dati dell'evento è True
), i gestori associati a Handles
non vengono richiamati in risposta a tale istanza dell'evento. L'evento potrebbe essere contrassegnato come gestito dai gestori dell'istanza in un altro elemento della route o dalla gestione delle classi nell'elemento corrente o negli elementi precedenti della route. Per gli eventi di input che supportano eventi accoppiati di tunneling e di bubbling, è possibile che la route di tunneling abbia contrassegnato la coppia di eventi come gestita. Per altre informazioni sugli eventi indirizzati, vedere Cenni preliminari sugli eventi indirizzati.
Limitazioni di "Handle" per l'aggiunta di gestori
Handles
non può fare riferimento ai gestori per gli eventi associati. Devi usare il metodo della add
funzione di accesso per gli attributi dell'evento associato o typename.eventname in XAML. Per informazioni dettagliate, vedere Cenni preliminari sugli eventi indirizzati.
Per gli eventi indirizzati, è possibile usare Handles
unicamente per assegnare gestori per le istanze in cui quell'evento è presente nella tabella dei membri dell'istanza. Tuttavia, con gli eventi indirizzati in generale, un elemento padre può essere un listener per un evento degli elementi figlio anche se l'elemento padre non dispone di quell'evento nella relativa tabella dei membri. Nella sintassi dell'attributo, ciò può essere specificato tramite un formato di attributo nometipo.nomemembro che qualifica il tipo che definisce effettivamente l'evento che si vuole gestire. Ad esempio, un elemento padre Page
(senza eventi Click
definiti) può restare in ascolto degli eventi button-click assegnando un gestore di attributi nel formato Button.Click
. Tuttavia, Handles
non supporta il formato nometipo.nomemembro, in quanto deve supportare un formato Istanza.Evento in conflitto. Per informazioni dettagliate, vedere Cenni preliminari sugli eventi indirizzati.
Handles
non è in grado di associare gestori richiamati per eventi che sono già contrassegnati come gestiti. È invece necessario usare il codice e chiamare l'overload handledEventsToo
di AddHandler(RoutedEvent, Delegate, Boolean).
Nota
Non usare la Handles
sintassi nel codice Visual Basic quando si specifica un gestore eventi per lo stesso evento in XAML. In questo caso, il gestore eventi viene chiamato due volte.
Come WPF implementa la funzionalità "Handles"
Quando viene compilata una pagina XAML (Extensible Application Markup Language), il file intermedio dichiara riferimenti Friend
WithEvents
a ogni elemento della pagina con un Name set di proprietà (o una direttiva x:Name dichiarata). Ogni istanza denominata è potenzialmente un elemento che può essere assegnato a un gestore tramite Handles
.
Nota
In Visual Studio, IntelliSense può mostrare il completamento per gli elementi disponibili per un Handles
riferimento in una pagina. Tuttavia, tale operazione potrebbe richiedere un passaggio di compilazione che consenta al file intermedio di popolare tutti i riferimenti Friends
.
Vedi anche
.NET Desktop feedback