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