10

我有以下 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;
}

现在,即使我将鼠标移到Buttonset上,也会分别调用和e.Handled = true的事件。为什么?我应该怎么做才能阻止路由事件冒泡?GridStackPanel

4

1 回答 1

11

MouseEnter 事件不是冒泡事件,它是直接事件(如经典 CLR 事件)。从文档中:

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

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

于 2011-06-09T17:34:52.493 回答