2015-02-24 11 views
5

Czytam książkę C# WPF oraz w rozdziale zdarzeń routowanych, wydarzenie ma 2 takie same właściwości: Source i OriginalSource. Nie widzę różnicy między nimi:Źródło zdarzenia w stosunku do oryginalnego źródła

XAML:

<Button Name="Ok" Click="Ok_Click"/> 

Kod tyle:

private void Ok_Click(object sender, RoutedEventArgs e) 
{ 
     bool flag = false; 
     var source = e.Source; 
     var originalSource = e.OriginalSource; 
     if (source == originalSource) 
     { 
      flag = true; 
     } 
} 

i flag własność true tutaj, może ktoś wyjaśnić, dlaczego 2 same właściwości lub w tym przypadku właściwości te nie mają wpływu? lub gdzie możemy zobaczyć przypadek użycia dla tych właściwości?

Odpowiedz

9

Kontrola może mieć inne elementy sterujące w jej obrębie jako dzieci. Gdy subskrybujesz wydarzenie od kontroli, rodzic, którego subskrybujesz, prawdopodobnie będzie to e.Source, ale jeśli kontrola ma dzieci, a dziecko jest tym, które podniosło wydarzenie, to dziecko będzie podnosić to wydarzenie OriginalSource.

Typowym przykładem użycia jest subskrypcja KeyDown zdarzeń na DataGrid. Źródłem może być siatka, ale pierwotnym źródłem może być komórka (lub jakiś składnik w komórce)