2011-08-29 9 views
12

¿Cuál es la diferencia entre sender y fuente en wpf event handling?RoutedEventArgs.Source vs Sender

Por ejemplo, decir que he tenido una elipse en un lienzo, y hacer clic en la elipse: la elipse sería tanto el remitente y la fuente .

Sin embargo, si la elipse no maneja el evento, pero no la ventana principal, pasará el evento a través de la tela ... así que el lienzo sería el remitente del evento a la ventana principal, pero la fuente sería la elipse.

¿Tengo eso correcto?

Respuesta

6

Bubbles!

El remitente es el objeto del que se está originando el evento, mientras que el origen fue el elemento original que provoca el evento.

Como en este 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) 
{ 
} 

En este caso, si se cambia el SelectedItem en la Sub TabControl, sender será igual tc1, Source será igual tc2.

15

La diferencia entre los dos no se ve a menudo, ya que generalmente el sender y el Source son iguales. La mayoría del código escrito como Windows Forms básicamente ignorará la diferencia y los enviará como la misma referencia. Sin embargo, dado que el enrutamiento de eventos de WPF funciona, representan dos conceptos diferentes.

sender is the object at which the event handler was attached. Este es el propietario que levantó el controlador para comenzar a enrutar el evento. De MSDN:

La diferencia entre el remitente y el origen es el resultado de que el evento se enrute a diferentes elementos, durante el recorrido del evento enrutado a través de un árbol de elementos.

MSDN: Event routing diagram

Source is the object where the event originates. En el caso de túneles y burbujeante, la Source será uno de sus elementos secundarios. Puede usar la propiedad OriginalSource para despegar cualquier encapsulación de árbol de eventos.

2

Espero que esto ayude :)

  • RoutedEventArgs.OriginalSource - objeto original que se planteó por primera vez el evento
  • RoutedEventArgs.Source - objeto que ha evento. Esto es generalmente lo mismo que OriginalSource, pero cuando se trata de controles compuestos, puede ser el padre que contiene el objeto OriginalSource.*
  • remitente - elemento actual que está manejando el caso

* casos comunes en donde la fuente puede ser ajustada incluye elementos de contenido dentro de un modelo de contenido para un control (el contenido de un elemento de la lista, por ejemplo, informará el elemento elemento de la lista como Origen y el elemento real dentro del elemento de la lista será OriginalSource).

Referencias:

4

remitente: elemento actual que está manejando el evento

OriginalSource: objeto original ese primer rai sed el evento

Fuente: objeto que provocó el evento. Suele ser lo mismo que OriginalSource, pero cuando se trata de controles compilados, puede ser el padre que contiene el objeto OriginalSource. *

RoutedEvent: proporciona el objeto RoutedEvent para el evento desencadenado por su controlador de eventos (como el UIElement estático. Objeto MouseUpEvent). Esta información es útil si maneja diferentes eventos con el mismo controlador de eventos.

Controlado: le permite detener el proceso de burbujeo o tunelización del evento. Cuando un control establece la propiedad Handled en true, el evento no viaja más y no se genera para ningún otro elemento.

Cuestiones relacionadas