事件源vs原始源

我正在阅读C#WPF书籍,在路由事件章节中,事件有2个相同的属性SourceOriginalSource 。 我没有看到它们之间的区别:

XAML:

 

代码背后:

 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相同的属性或在这种情况下这个属性没有效果? 或者我们在哪里可以看到这个属性的用例?

控件可以在其中包含其他控件作为子控件。 当您从控件订阅事件时,您订阅的父级可能是e.Source但是如果控件具有子级并且子级是引发事件的子级,则OriginalSource将是引发该事件的子级。

一个常见的用例是订阅DataGrid上的KeyDown事件。 源可以是网格,但原始源可能是单元格(或单元格中的某个组件)