我有两个按钮:
<Button Name="parent">
<StackPanel>
<Button Name="a" />
<Button Name="b" />
<Button Name="c" />
<Button Name="d" />
<Button Name="e" />
</StackPanel>
</Button>
父级已注册PreviewMouseLeftButtonDown
个事件。
我希望如果我们点击按钮PreviewMouseLeftButtonDown
(c
进行其他注册),则不会发生父级的c
事件。我无法专门检查它(使用GetPosition或注册到c
上的MouseEnter并更改一些标志...),因为parnet
是通用的,并且可以包含许多按钮。
我尝试在PreviewMouseLeftButtonDown
注册c
,但e.Handled = true
没有帮助我,因为父母的事件发生在孩子的事件之前。
有什么办法吗?
由于
答案 0 :(得分:2)
那是因为PreviewMouseLeftButtonDown使用了一个隧道策略,它最后击中了孩子,然后是父母,
听起来你需要使用MouseLeftButtonDown,它使用冒泡策略并应用
e.IsHandled = true
从c处理时,
仅供参考,因此e.IsHandled仅影响您Button的子元素。
请参阅RoutedEvents