2010-01-27 3 views
11

1.st partie de la question: Quelle est la différence entre ces 2 enregistrements d'événements?UIElement.AddHandler() vs .Event + = Définition

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

_popUp.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_popUp_PreviewMouseLeftButtonDown); 

partie 2.ème de la question: ou éventuellement contre

popUp.Opened += PopUp_Opened; 

Répondre

10

Selon Redgate's Reflector, il n'y a pas de différence. Les deux méthodes appellent finalement la méthode interne EventHandlerStore.AddRoutedEventHandler. Ceci est la sortie de réflecteur du accesseur add pour l'événement PreviewMouseLeftButtonDown (dans la classe UIElement):

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

Comme vous pouvez le voir appelle UIElement.AddHandler pour vous.

Avant de modifier votre question, vous posiez des questions sur l'événement Opened de la fenêtre contextuelle. Dans ce cas, il existe une différence: tout d'abord, l'événement Opened n'est pas implémenté en tant qu'événement routé mais en tant qu'événement simple, vous ne pouvez donc même pas utiliser l'appel AddHandler. Deuxièmement, le réflecteur montre qu'une méthode différente est appelée dans le EventHandlerStore qui ajoute le gestionnaire à une collection de délégués simple.

5

L'élément important pourrait être le AddHandler(xxx,xxx, false).

Si vous utilisez true alors vous pouvez attraper des événements qui ont déjà été traités, ce qui peut être utile si vous sous-classez des contrôles comme TextBox.