PaN*_*1Me 11 c# wpf event-handling
1.问题的一部分: 这两个事件注册有什么区别?
_popUp.AddHandler(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(PopUp_PreviewMouseLeftButtonDown));
_popUp.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_popUp_PreviewMouseLeftButtonDown);
Run Code Online (Sandbox Code Playgroud)
2.问题的一部分: 或最终与
popUp.Opened += PopUp_Opened;
Run Code Online (Sandbox Code Playgroud)
Avi*_* P. 10
根据Redgate的Reflector,没有区别.这两种方法最终都会调用内部方法EventHandlerStore.AddRoutedEventHandler.这是事件(在类中)的add访问器的反射器输出:PreviewMouseLeftButtonDownUIElement
public void add_PreviewMouseLeftButtonDown(MouseButtonEventHandler value)
{
this.AddHandler(PreviewMouseLeftButtonDownEvent, value, false);
}
Run Code Online (Sandbox Code Playgroud)
你可以看到它呼唤UIElement.AddHandler你.
在您编辑问题之前,您询问Opened的是弹出事件.在这种情况下,存在差异:首先,Opened事件不是作为路由事件实现,而是作为简单事件实现,因此您甚至无法使用AddHandler它进行调用.其次,反射器显示调用了一个不同的方法,该方法EventHandlerStore将处理程序添加到一个简单的委托集合中.
| 归档时间: |
|
| 查看次数: |
8892 次 |
| 最近记录: |