事件源vs原始源

时间:2015-02-24 05:22:50

标签: c# wpf xaml events

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

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

1 个答案:

答案 0 :(得分:12)

控件可以在其中包含其他控件作为子控件。当您从控件订阅某个事件时,您订阅的父级可能是e.Source但是如果该控件有子级且该子级是引发该事件的子级,那么OriginalSource将是提起这件事的孩子。

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