事件源与原始源
Event source vs original source
我正在阅读 C# WPF 书籍和路由事件章节,事件有 2 个相同的属性 Source
和 OriginalSource
。我没有看出它们之间的区别:
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 相同 属性 或者在这种情况下这个属性没有效果吗?或者我们在哪里可以看到此属性的用例?
一个控件中可以包含其他控件,如 children。当您从控件订阅事件时,您订阅的 parent 可能是 e.Source
但是如果控件有 children 而 child 是那个引发事件,那么 OriginalSource
将是引发事件的 child。
一个常见的用例是在 DataGrid
上订阅 KeyDown
事件。来源可能是网格,但原始来源可能是单元格(或单元格中的某些组件)
我正在阅读 C# WPF 书籍和路由事件章节,事件有 2 个相同的属性 Source
和 OriginalSource
。我没有看出它们之间的区别:
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 相同 属性 或者在这种情况下这个属性没有效果吗?或者我们在哪里可以看到此属性的用例?
一个控件中可以包含其他控件,如 children。当您从控件订阅事件时,您订阅的 parent 可能是 e.Source
但是如果控件有 children 而 child 是那个引发事件,那么 OriginalSource
将是引发事件的 child。
一个常见的用例是在 DataGrid
上订阅 KeyDown
事件。来源可能是网格,但原始来源可能是单元格(或单元格中的某些组件)