2010-01-27 16 views
11

parte 1.st del quesion: ¿Cuál es la diferencia entre estos 2 registros de eventos?UIElement.AddHandler() .Los vs + = Definición

_popUp.AddHandler(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(PopUp_PreviewMouseLeftButtonDown)); 

_popUp.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_popUp_PreviewMouseLeftButtonDown); 

parte 2.a de la cuestión: o eventualmente contra

popUp.Opened += PopUp_Opened; 

Respuesta

10

Según Redgate's Reflector, no hay ninguna diferencia. Ambos métodos finalmente llaman al método interno EventHandlerStore.AddRoutedEventHandler. Esta es la salida del reflector de la add de acceso para el evento PreviewMouseLeftButtonDown (en la clase UIElement):

public void add_PreviewMouseLeftButtonDown(MouseButtonEventHandler value) 
{ 
    this.AddHandler(PreviewMouseLeftButtonDownEvent, value, false); 
} 

Como se puede ver que llama UIElement.AddHandler para usted.

Antes de editar su pregunta, preguntaba sobre el evento Opened de la ventana emergente. En ese caso, existe una diferencia: en primer lugar, el evento Opened no se implementa como un evento enrutado sino como un evento simple, por lo que ni siquiera puede usar la llamada AddHandler. En segundo lugar, el reflector muestra que se llama a un método diferente en el EventHandlerStore, que agrega el manejador a una simple colección de delegados.

5

Lo importante podría ser el AddHandler(xxx,xxx, false).

Si usa true, puede capturar eventos que ya se han manejado, lo que puede ser útil si se subclasifican controles como TextBox.