【问题标题】:Why e.Handled = true not working?为什么 e.Handled = true 不起作用?
【发布时间】:2011-09-11 21:57:51
【问题描述】:

我有以下 XAML

 <StackPanel MouseEnter="StackPanel_MouseEnter" Height="130" Background="Blue">
    <Grid MouseEnter="Grid_MouseEnter" Height="60" Background="Red" >
       <Button MouseEnter="Button_MouseEnter" Height="20"/>
    </Grid>
 </StackPanel>

在后面的代码中我正在这样做

private void StackPanel_MouseEnter(object sender, MouseEventArgs e)
{

}

private void Grid_MouseEnter(object sender, MouseEventArgs e)
{
    e.Handled = true;
}

private void Button_MouseEnter(object sender, MouseEventArgs e)
{   
    e.Handled = true;
}

现在即使我将鼠标移到Button 上并设置e.Handled = trueGridStackPanel 的事件也会分别被调用。为什么?我应该怎么做才能阻止路由事件冒泡?

【问题讨论】:

    标签: c# wpf routed-events


    【解决方案1】:

    MouseEnter 事件不是冒泡事件,它是直接事件(如经典 CLR 事件)。来自documentation

    你可以定义多个 MouseEnter XAML 内容中的对象的事件。 但是,如果一个子对象及其 父对象都定义了一个 MouseEnter 事件,父对象的 MouseEnter 事件发生在子对象之前 鼠标输入事件。这不是个案 冒泡事件;它仅表示 鼠标(或触控笔)已进入 两个对象,可能在不同的 时间取决于布局和 可视化树的组成。

    所以你不能阻止它被父母解雇。您可以使用IsMouseDirectlyOver 属性来查看鼠标是否实际上只在给定元素上。

    【讨论】:

    • 关于您的用户名中的提案,我支持该议案!
    猜你喜欢
    • 2015-09-12
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多