问题 UIElement.AddHandler()vs .Event + = Definition


1.问题的一部分: 这两个活动注册有什么区别?

_popUp.AddHandler(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(PopUp_PreviewMouseLeftButtonDown));

_popUp.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(_popUp_PreviewMouseLeftButtonDown);

2.问题的一部分: 或最终与

popUp.Opened += PopUp_Opened;

2109
2018-01-27 13:05


起源



答案:


根据 Redgate的反射器, 没有区别。两种方法最终都会调用内部方法 EventHandlerStore.AddRoutedEventHandler。这是反射器的输出 add 的访问者 PreviewMouseLeftButtonDown 事件(在课堂上 UIElement):

public void add_PreviewMouseLeftButtonDown(MouseButtonEventHandler value)
{
    this.AddHandler(PreviewMouseLeftButtonDownEvent, value, false);
}

正如你所看到的那样 UIElement.AddHandler 为你。

在您编辑问题之前,您询问的是 Opened 弹出的事件。在这种情况下,有一个区别:第一, Opened 事件不是作为路由事件实现的,而是作为一个简单事件实现的,因此您甚至无法使用 AddHandler 打电话给它。其次,反射器显示了一种不同的方法 EventHandlerStore 它将处理程序添加到一个简单的委托集合中。


10
2018-01-27 13:50





重要的可能是 AddHandler(xxx,xxx, false)

如果你使用 true 然后你可以捕获已经处理过的事件,如果你像TextBox那样继承了类,那么这些事件会很有用。


5
2018-05-08 01:48