为什么e.Handled = true不起作用?

我有以下XAML

  

在代码背后,我正在这样做

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

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

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

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