防止PreviewMouseLeftButtonDown影响父对象,特定子对象

时间:2013-10-06 08:18:37

标签: wpf events wpf-controls mouseevent

我有两个按钮:

<Button Name="parent">
    <StackPanel>
        <Button Name="a" />
        <Button Name="b" />
        <Button Name="c" />
        <Button Name="d" />
        <Button Name="e" />
    </StackPanel>
</Button>

父级已注册PreviewMouseLeftButtonDown个事件。 我希望如果我们点击按钮PreviewMouseLeftButtonDownc进行其他注册),则不会发生父级的c事件。我无法专门检查它(使用GetPosition或注册到c上的MouseEnter并更改一些标志...),因为parnet是通用的,并且可以包含许多按钮。

我尝试在PreviewMouseLeftButtonDown注册c,但e.Handled = true没有帮助我,因为父母的事件发生在孩子的事件之前。

有什么办法吗?

由于

1 个答案:

答案 0 :(得分:2)

那是因为PreviewMouseLeftButtonDown使用了一个隧道策略,它最后击中了孩子,然后是父母,

听起来你需要使用MouseLeftButtonDown,它使用冒泡策略并应用

     e.IsHandled = true

从c处理时,

仅供参考,因此e.IsHandled仅影响您Button的子元素。

请参阅RoutedEvents