Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIElement.AddHandler() vs .Event += Definition

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;
like image 759
theSpyCry Avatar asked Jan 27 '10 13:01

theSpyCry


2 Answers

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.

like image 176
Aviad P. Avatar answered Nov 05 '22 17:11

Aviad P.


The important thing might be the AddHandler(xxx,xxx, false).

If you use true then you can catch events that have already been handled, which can be useful if you subclass Controls like TextBox.

like image 34
Stefan U7 Avatar answered Nov 05 '22 19:11

Stefan U7