我有以下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的事件也会分别调用。为什么?我该怎么做才能阻止路由事件冒泡?

最佳答案

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



因此,您不能阻止它被 parent 开除。您可以使用IsMouseDirectlyOver属性来查看鼠标是否实际上仅位于给定元素上。

关于c# - 为什么e.Handled = true无法正常工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6296836/

10-13 06:05