2009-09-15 11 views
15

Sto imparando WPF/Silverlight e ho visto in un vidcast di Microsoft che ora si consiglia di usare RoutedEventArgs su EventArgs; anche se non ha detto esattamente perché.RoutedEventArgs vs EventArgs

Ho un'app win form che utilizza interfacce per "widget" nel tentativo di non essere vincolato a una specifica tecnologia di visualizzazione (in Presenters/ViewModels), quindi se il mio evento Click di IButton ora deve prendere il RoutedEventArgs ora I Immagino che non sia così utile.

Qualcuno può spiegare se dovrei passare a RoutedEventArgs in tutti i casi e perché?

Per inciso, qualcun altro ha esperienza/opinioni sull'utilizzo dei widget di interfaccia come li sto descrivendo?

risposta

32

Ebbene, fondamentalmente un RoutedEvent viaggi attraverso l'albero Logical, sia dall'elemento sorgente di radicare elemento (Bubble route dell'evento) o, meno frequentemente dall'elemento radice alla sub elementi piani (Tunnel percorso dell'evento). Ciò significa che se si dispone di uno Button all'interno di uno StackPanel, esso stesso si trova all'interno di un Grid; se si definisce un evento Click nei controlli, verranno tutti attivati ​​a meno che uno di essi non contenga lo .

Se l'itinerario evento è Bubble (chiamato come un appuntamento fisso Click), andrà:

Button -> StackPanel -> Grid

Se l'itinerario evento è Tunnel (nome PreviewClick), andrà il contrario :

Grid -> StackPanel -> Button

Così ora con la gestione , è abbastanza semplice. Se è un percorso Bubble e lo Button imposta il valore RoutedEventArgs.Handled su true, che lo StackPanel e Grid non lo attivano. Lo stesso con lo RoutedEvent, se lo gestisce lo Grid, lo StackPanel e lo Button non lo attivano.

Questa è la mia comprensione in poche parole, ho evitato alcune cose per semplicità.

Si consiglia di this chapter per una migliore comprensione di questa funzione WPF.

+2

mia testa fa male = ( – Coops

+1

@CodeBlend nessun dolore, nessun guadagno! – Carlo

+1

spiegazione semplice e concisa. In quale caso avresti bisogno di usare un evento tunnel? Non riesco a pensare a nessun usi pratici. –

1

RoutedEventArgs è un nuovo tipo di argomento evento esistente per supportare il modello WPF di eventing: Eventi instradati. È difficile spiegare in una breve descrizione perché esattamente WPF abbia scelto questo modello o quale sia il punto, quindi inizierò segnalandoti un buon articolo sull'argomento.

0

Supponiamo di avere un elemento Button contenente altri elementi, uno StackPanel, a sua volta contenente un oggetto TextBox e un elemento Image.

L'elemento Button dovrebbe essere in grado di gestire un evento click non importa se l'immagine è stata selezionata o se il TextBox era.

Quindi WPF fornisce un modo per:

  • propagano un evento attraverso albero elemento più delle volte gorgogliamento dall'elemento sorgente (qui dir Image), ad un livello superiore verso elemento radice (ad esempio il pulsante qui).
  • Gestire tale evento propagato.
Problemi correlati