RoutedEventArgs.OriginalSource 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取对引发事件的 对象的引用。 这通常是控件的模板部分,而不是在应用 UI 中声明的元素。
public:
property Platform::Object ^ OriginalSource { Platform::Object ^ get(); };
IInspectable OriginalSource();
public object OriginalSource { get; }
var object = routedEventArgs.originalSource;
Public ReadOnly Property OriginalSource As Object
属性值
引发事件的对象。
注解
当路由事件浮升事件路由时, 发送方 不再是与引发事件的对象相同的对象。 相反,sender 是所调用的处理程序附加到的对象。
在某些情况下,sender 不是应关注的对象,你关注的是一些信息,例如在触发指针事件时指针在哪个可能的子对象上方,或者在用户按下键盘上的键时较大 UI 中的哪个对象拥有焦点。 对于这些情况,你可以使用 OriginalSource 属性的值。 在路由上的所有点上,OriginalSource 都会报告引发事件的原始对象,而不是报告附加了处理程序的对象。 但是,对于 UIElement 输入事件,该原始对象常常是一个不会在页面级 UI 定义 XAML 中立即可见的对象。 相反,该原始源对象可能是控件的一个模板部分。 例如,如果用户将指针悬停在 Button 的边缘,对于大部分指针事件,OriginalSource 是 Template 中的 Border 模板部分,而不是 Button 本身。 因此,不能始终依赖于 OriginalSource 来表示在 XAML 页面级 UI 定义中专门声明的对象。
提示
如果要创建模板化控件,输入事件浮升特别有用。 对于任何具有模板的控件,其客户都可能应用一个新模板。 尝试重新创建工作模板的客户可能会无意中清除默认模板中声明的某些事件处理功能。 你仍然可以通过在类定义中将处理程序附加为 OnApplyTemplate 替代的一部分来提供控件级事件处理功能。 然后,你可以捕获在实例化时向上浮升至控件根的输入事件。