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;
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With