UIElement.AddHandler() vs .Event += Definition(UIElement.AddHandler() 与 .Event += 定义)
问题描述
问题的第一部分:这两个事件注册有什么区别?
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 += 定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:UIElement.AddHandler() 与 .Event += 定义
基础教程推荐
- 如果条件可以为空 2022-01-01
- C# 9 新特性——record的相关总结 2023-04-03
- 获取C#保存对话框的文件路径 2022-01-01
- 更新 Visual Studio 中的 DataSet 结构以匹配新的 SQL 数据库结构 2022-01-01
- Mono https webrequest 失败并显示“身份验证或解密失败" 2022-01-01
- 从 C# 控制相机设备 2022-01-01
- 重新排序 WPF TabControl 中的选项卡 2022-01-01
- 在 VB6 或经典 ASP 中使用 .NET 2022-01-01
- 将数据集转换为列表 2022-01-01
- SonarQube C# 分析失败“不是指针的有效行偏移" 2022-01-01
