2015-02-24 53 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。源可能是網格,但原始源可能是單元(或單元中的某個組件)