我应该使用RoutedEventHandler吗?

时间:2010-10-17 07:14:41

标签: c# event-handling

这两者之间的区别是什么:

_btnAddNew.Click += OnAddNewClick;

 _btnAddNew.Click += new RoutedEventHandler(OnAddNewClick);

谢谢!

2 个答案:

答案 0 :(得分:10)

没有区别......第一个是第二个的快捷方式。

事实上,如果您尝试两种方式,然后使用Reflector来反汇编程序集,您可以看到它完全相同并且都被解释为:

_btnAddNew.Click += new RoutedEventHandler(OnAddNewClick);

答案 1 :(得分:0)

复制自: http://msdn.microsoft.com/en-us/library/system.windows.routedeventhandler.aspx

  

RoutedEventHandler委托用于任何不报告事件数据中特定于事件的信息的路由事件。有很多这样的路线事件;突出的例子包括Click and Loaded。

     

为一个路由事件而不是一般公共语言运行时(CLR)事件编写处理程序之间最值得注意的区别是,事件的发送者(附加和调用处理程序的元素)不能被认为是必然的成为活动的源头。源被报告为事件数据(Source)中的属性。发送方和源之间的差异是在通过元素树遍历路由事件期间将事件路由到不同元素的结果。

     

如果您故意对直接或冒泡路由事件的路由行为不感兴趣,并且您只打算在首次引发它们的元素上处理路由事件,则可以使用sender或Source作为对象引用。在这种情况下,发件人和来源是同一个对象。

     

如果您打算利用路由事件的固有功能并相应地编写处理程序,那么在编写事件处理程序时将使用的事件数据的两个最重要的属性是Source和Handled。

     

对于输入事件和WPF控件类的某些组合,引发事件的元素不是第一个有机会处理它的元素。如果输入事件具有事件的预览版本,则元素树的根具有第一个机会,可以在共享事件数据中将Handled设置为true,并且可以影响如何将输入事件报告给其事件路径中的剩余元素。预览处理行为可以提供未按预期引发特定路由事件的外观。有关更多信息,请参阅预览事件和输入概述。