2009-05-03 18 views

risposta

12

Gli eventi instradati hanno un comportamento speciale, ma tale comportamento è in gran parte invisibile se si gestisce un evento sull'elemento in cui è stato generato.

Dove gli eventi indirizzati diventano potenti è se si utilizza uno degli scenari suggeriti: definizione di gestori comuni su una radice comune, composizione del proprio controllo o definizione della propria classe di controllo personalizzata.

I listener di eventi instradati e le origini di eventi instradati non devono condividere un evento comune nella loro gerarchia. Qualsiasi UIElement o ContentElement può essere un listener di eventi per qualsiasi evento indirizzato. Pertanto, è possibile utilizzare l'intera serie di eventi instradati disponibili in tutto l'insieme di API di lavoro come "interfaccia" concettuale in base alla quale elementi disparati nell'applicazione possono scambiarsi informazioni sugli eventi. Questo concetto di "interfaccia" per eventi indirizzati è particolarmente applicabile per gli eventi di input.

Gli eventi indirizzati possono anche essere utilizzati per comunicare attraverso l'albero degli elementi, poiché i dati degli eventi per l'evento vengono perpetuati su ciascun elemento della rotta. Un elemento potrebbe modificare qualcosa nei dati dell'evento e tale modifica sarebbe disponibile per l'elemento successivo nella rotta.

Oltre all'aspetto di instradamento, esistono altri due motivi per cui un determinato evento WPF potrebbe essere implementato come evento indirizzato anziché un evento CLR standard. Se si implementa i propri eventi, si potrebbe anche prendere in considerazione questi principi:

  • Alcune funzionalità di stili e modelli di WPF, come EventSetter e EventTrigger richiedono l'evento di riferimento per essere un evento indirizzato. Questo è lo scenario dell'identificatore di eventi menzionato in precedenza.
  • Gli eventi instradati supportano un meccanismo di gestione classi in base al quale la classe può specificare metodi statici che hanno l'opportunità di gestire gli eventi indirizzati prima che qualsiasi gestore di istanze registrato possa accedervi. Questo è molto utile nella progettazione del controllo, perché la classe può imporre comportamenti di classe basati sugli eventi che non possono essere accidentalmente soppressi gestendo un evento su un'istanza.

Fonte: MSDN: Routed Events Overview

+0

Jahedbozorgan: grazie per la tua risposta molto completa. Ho notato che hai citato una fonte nella risposta. Ma mi stavo chiedendo se ci fossero altri libri che parlano di RoutedEvents in dettaglio. Se ne hai mai trovati, per favore condividili anche tu. – gprasant

0

In composizione di controllo WPF è molto utilizzato. che impone di utilizzare l'evento indirizzato, poiché la composizione dell'insieme di controlli espone la singola attività per la maggior parte del tempo.