如何防止点击通过控件传递给它下面的控件

时间:2011-09-20 16:02:06

标签: c# .net wpf

我在分组框中有一个文本框,都有双击事件。当我双击文本框时,会触发两个事件。

如何阻止文本框中的点击进入群组框?我试过把“e.Handled = true;”在textbox_DoubleClick事件的末尾,但没有区别。

3 个答案:

答案 0 :(得分:8)

因为WPF使用事件传播的“隧道/冒泡”模型,所以大多数事件从可视树的底部开始冒泡。如果您想在 down 的路上捕获事件,则会有Preview个版本的事件向下挖掘。例如:

PreviewMouseDoubleClick

在那里设置e.Handled = true

答案 1 :(得分:3)

在您的GroupBox的DoubleClick事件中,您可以检查e.OriginalSource的值,如果该值不是GroupBox,则忽略该事件

private void TabItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    if (e.OriginalSource is GroupBox)
    { 
        // Your code here
    }
}

我认为ClickEvents实际上是Direct Events,而不是Tunneled / Bubbled事件,因此将e.Handled设置为一个不会取消另一个。

MSDN Site for MouseDoubleClick

  

虽然这个路线事件似乎遵循一条冒泡的路线   元素树,它实际上是一个引发的直接路由事件   每个UIElement沿着元素树。

答案 2 :(得分:1)

你应该在PreviewDoubleClick中处理e.Handled,因为隧道事件发生在冒泡之前。

为什么你需要在文本框和组合框中处理该事件?因为两个单独的事件被解雇因为它被解雇了。