UIElement.AddHandler() vs .Event += Definition

c#, event-handling, wpf

Solution

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.

Problem

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; ```

Original source