2011-08-29 5 views
12

Qual è la differenza tra mittente e source in gestione evento wpf?RoutedEventArgs.Source vs Sender

Per esempio, dire che ho avuto un'ellisse in una tela, e cliccato sul dell'ellisse: l'ellisse sarebbe sia il mittente e la fonte.

Tuttavia, se l'ellisse non gestisce l'evento, ma la finestra principale non, l'evento passerà attraverso la tela ... quindi la tela sarebbe la mittente della manifestazione alla finestra principale, ma la fonte sarebbe l'ellisse.

Ho capito bene?

risposta

6

Bolle!

Il mittente è l'oggetto da cui viene generato l'evento, mentre l'origine era l'elemento originale che causa l'aumento dell'evento.

come in questo caso:

<TabControl Name="tc1" SelectionChanged="tc1_SelectionChanged"> 
    <TabItem Header="1"> 
     <TabControl Name="tc2"> 
      <TabItem Header="1" /> 
      <TabItem Header="2" /> 
     </TabControl> 
    </TabItem> 
    <TabItem Header="2" /> 
</TabControl> 
private void tc1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
} 

In questo caso, se si modifica la SelectedItem sul Sub- TabControl, sender sarà pari tc1, Source sarà pari tc2.

15

La differenza tra i due non è frequente, poiché di solito lo sender e lo Source sono gli stessi. La maggior parte del codice scritto come Windows Form ignorerà fondamentalmente la differenza e li invierà come lo stesso riferimento. Tuttavia, dato il modo in cui il routing degli eventi di WPF funziona, rappresentano due concetti diversi.

sender is the object at which the event handler was attached. Questo è il proprietario che ha aumentato il gestore per iniziare il routing dell'evento. Da MSDN:

Una differenza tra mittente e Sorgente è il risultato dell''invio dell'evento a elementi diversi, durante l'attraversamento dell'evento indirizzato attraverso un albero di elementi.

MSDN: Event routing diagram

Source is the object where the event originates. Nel caso di tunneling e spumeggiante, il Source sarà uno dei loro elementi secondari. È possibile utilizzare la proprietà OriginalSource per rimuovere qualsiasi incapsulamento dell'albero degli eventi.

2

Spero che questo aiuti :)

  • RoutedEventArgs.OriginalSource - oggetto originale che prima ha generato l'evento
  • RoutedEventArgs.Source - oggetto che ha sollevato evento. Questo è solitamente uguale a OriginalSource ma quando si ha a che fare con i Controlli Compositi può essere il genitore che contiene l'oggetto OriginalSource.*
  • mittente - elemento attuale che sta gestendo l'evento

* casi comuni in cui la sorgente può essere regolata includono elementi di contenuto all'interno di un modello di contenuto per un controllo (il contenuto di un elemento della lista, ad esempio, segnalerà l'elemento dell'elemento di elenco come origine e l'elemento effettivo all'interno dell'elemento di elenco sarà l'origine originale).

Riferimenti:

4

mittente: elemento corrente che sta gestendo l'evento

OriginalSource: oggetto originale quel primo rai sed l'evento

Fonte: oggetto che ha sollevato l'evento. Questo è solitamente uguale a OriginalSource ma quando si ha a che fare con Composite Controls può essere il genitore che contiene l'oggetto OriginalSource. *

RoutedEvent: fornisce l'oggetto RoutedEvent per l'evento innescato dal gestore eventi (come UIElement statico. Oggetto MouseUpEvent). Questa informazione è utile se gestisci eventi diversi con lo stesso gestore di eventi.

Gestito: consente di interrompere il processo di bubbling o tunneling degli eventi. Quando un controllo imposta la proprietà Handled su true, l'evento non viaggia oltre e non viene generato per nessun altro elemento.

Problemi correlati