RoutedEventHandler 委托用于不在事件数据内报告事件特定信息的任何路由事件。这类路由事件有很多;显著示例包括 Click 和 Loaded。
与一般 公共语言运行时 (CLR) 事件相比,为路由事件编写处理程序时最值得注意的区别是,不能将事件的 sender(一种元素,在此元素处附加和调用处理程序)视为必须是事件的源。在事件数据中,源被报告为属性(Source)。在通过元素树遍历路由事件的过程中,sender 和 Source 之间的区别是路由到不同元素的事件的结果。
如果您特意对直接或冒泡路由事件不感兴趣,并只想处理首先引发路由事件的元素上的路由事件,则您可以使用 sender 或 Source 进行对象引用。在这种情况下,sender 和 Source 是相同的对象。
如果您确实想利用路由事件的固有功能,并相应地编写您的处理程序,则编写事件处理程序时,您将使用的事件数据的两个最重要属性为 Source 和 Handled。
对于输入事件和 WPF 控件类的某些组合,引发事件的元素不是有机会处理该事件的第一个元素。如果输入事件有事件的预览版,则元素树的根具有第一机会,并可在共享事件数据中将 Handled 设置为 true,还可影响如何将输入事件报告至其事件路由中的剩余元素。预览处理行为可能使特定路由事件看起来未像所希望地那样被引发。有关更多信息,请参见 预览事件 和 输入概述。