【发布时间】:2019-09-19 15:16:11
【问题描述】:
我已阅读here 和in the MS docs 是通过命中测试确定的,但本问题末尾的示例与此相反,或者我目前理解。
Here我读到它是引发事件的第一个对象,但我不知道这是什么意思,即在下面的示例中。
我目前的理解
鉴于此代码:
private void Handler(object sender, RoutedEventArgs e)
{
// what does it mean here: sender, e.Source and e.OriginalSource ?
}
- sender - 处理事件的元素(处理程序附加到该元素)
- e.Source - 事件开始在可视化树中进行的元素(从上到下,或从下到上)
- e.OriginalSource - 通过命中测试确定的最深元素,在可视化树中事件开始进展的元素内部
例子
鉴于以下源 XAML 的可视化树:
<StackPanel x:Name="sp" Button.Click="Handler">
<Button x:Name="btn1">button 1</Button>
<Button x:Name="btn2">button 2</Button>
<Button x:Name="btn3" Padding="5">
<Rectangle Width="100" Height="100" Fill="Blue" x:Name="r"/>
</Button>
</StackPanel>
和上面一样的处理程序:
private void Handler(object sender, RoutedEventArgs e)
{
// what does it mean here: sender, e.Source and e.OriginalSource ?
}
当点击时:
-
btn1:sender将是sp,e.Source将是btn1,e.OriginalSource将是btn1 -
btn2:sender将是sp,e.Source将是btn2,e.OriginalSource将是btn2 -
btn3:sender将是sp,e.Source将是btn3,e.OriginalSource将是:-
r如果点击蓝色Rectangle(这里我错了,我不知道为什么) -
btn3如果在btn3中的空间上点击了r
-
我得到的是e.OriginalSource == btn3,而不是上面列表中最新元素中的r。
官方文档是here。
谢谢。
【问题讨论】:
标签: c# wpf mouseevent hittest routed-events