2015-02-24 58 views
5

我在阅读C#WPF书籍和路由事件章节,事件有2个相同的属性SourceOriginalSource。我没有看到他们之间的区别:事件源vs原始源

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

回答

9

控件可以将其他控件作为子对象。当您订阅控件中的事件时,您订阅的父母很可能是e.Source但是如果控件有孩子,并且孩子是提高事件的孩子,那么OriginalSource将成为引发该事件的孩子。

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