我正在阅读C#WPF书籍,在路由事件一章中,事件有2个相同的属性Source
和OriginalSource
。我没有看到它们之间的区别:
的Xaml:
<Button Name="Ok" Click="Ok_Click"/>
代码背后:
private void Ok_Click(object sender, RoutedEventArgs e)
{
bool flag = false;
var source = e.Source;
var originalSource = e.OriginalSource;
if (source == originalSource)
{
flag = true;
}
}
和flag
属性true
在这里,有人可以解释为什么2个相同的属性或者在这种情况下这个属性没有效果吗?或者我们在哪里可以看到这个属性的用例?
答案 0 :(得分:12)
控件可以在其中包含其他控件作为子控件。当您从控件订阅某个事件时,您订阅的父级可能是e.Source
但是如果该控件有子级且该子级是引发该事件的子级,那么OriginalSource
将是提起这件事的孩子。
一个常见用例是订阅DataGrid
上的KeyDown
事件。源可以是网格,但原始源可能是单元格(或单元格中的某个组件)