问题的第一部分:这两个事件注册有什么区别?
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);
问题的第二部分:或最终与
popUp.Opened += PopUp_Opened;
根据Redgate的Reflector,没有区别.这两种方法最终都会调用内部方法EventHandlerStore.AddRoutedEventHandler
.这是 PreviewMouseLeftButtonDown
事件的 add
访问器的反射器输出(在类 UIElement
中):
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);
}
如您所见,它会为您调用 UIElement.AddHandler
.
As you can see it calls UIElement.AddHandler
for you.
在编辑问题之前,您询问的是弹出窗口的 Opened
事件.在这种情况下,有一个区别:首先,Opened
事件不是作为路由事件实现的,而是作为一个简单事件实现的,所以你甚至不能使用AddHandler
打电话给它.其次,反射器显示在 EventHandlerStore
中调用了一个不同的方法,它将处理程序添加到一个简单的委托集合中.
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.
这篇关于UIElement.AddHandler() 与 .Event += 定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!