views:

209

answers:

1

Hi !

1.st part of the quesion: What is the difference between these 2 event registrations ?

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

_popUp.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_popUp_PreviewMouseLeftButtonDown);

2.nd part of the question: or eventually versus

popUp.Opened += PopUp_Opened;
+3  A: 

According to Redgate's Reflector, there is no difference. Both methods eventually call the internal method EventHandlerStore.AddRoutedEventHandler. This is the reflector output of the add accessor for the PreviewMouseLeftButtonDown event (in the class UIElement):

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

As you can see it calls UIElement.AddHandler for you.

Before you edited your question you were asking about the Opened event of the popup. In that case, there is a difference: First, the Opened event is not implemented as a routed event but as a simple event, so you can't even use the AddHandler call on it. Secondly, the reflector shows that a different method is called in the EventHandlerStore which adds the handler to a simple delegate collection.

Aviad P.