UIElement.AddHandler()vs .Event + = Definition
1.问题的一部分:这两个事件注册有什么区别?
_popUp.AddHandler(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(PopUp_PreviewMouseLeftButtonDown)); _popUp.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_popUp_PreviewMouseLeftButtonDown);
2.问题的一部分:或最终与…相关
popUp.Opened += PopUp_Opened;
根据Redgate的Reflector ,没有区别。 两种方法最终都调用内部方法EventHandlerStore.AddRoutedEventHandler
。 这是PreviewMouseLeftButtonDown
事件的add
访问器的reflection器输出(在类UIElement
):
public void add_PreviewMouseLeftButtonDown(MouseButtonEventHandler value) { this.AddHandler(PreviewMouseLeftButtonDownEvent, value, false); }
如您所见,它为您调用UIElement.AddHandler
。
在编辑问题之前,您询问弹出窗口的已Opened
事件。 在这种情况下,存在一个区别:首先, Opened
事件不是作为路由事件实现的,而是作为一个简单事件实现的,因此您甚至无法对其使用AddHandler
调用。 其次,reflection器显示在EventHandlerStore
中调用了一个不同的方法,它将处理程序添加到一个简单的委托集合中。
重要的可能是AddHandler(xxx,xxx, false)
。
如果使用true
那么您可以捕获已经处理过的事件,如果您像TextBox这样inheritance类控件,这将非常有用。
上述就是C#学习教程:UIElement.AddHandler()vs .Event + = Definition分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1018450.html