Har*_*san 10 c# wpf routed-events
我跟随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>
Run Code Online (Sandbox Code Playgroud)
在代码背后,我正在这样做
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;
}
Run Code Online (Sandbox Code Playgroud)
现在,即使我将鼠标移动Button并设置e.Handled = true,Grid也StackPanel分别调用和调用事件.为什么?我应该怎么做才能阻止路由事件冒泡?
Cod*_*ked 11
MouseEnter事件不是冒泡事件,它是直接事件(如经典CLR事件).从文档:
您可以为XAML内容中的对象定义多个MouseEnter事件.但是,如果子对象及其父对象都定义了MouseEnter事件,则父对象的MouseEnter事件将发生在子对象的MouseEnter事件之前.这不是冒泡事件的情况; 它仅表示鼠标(或手写笔)已经进入两个对象,可能在不同的时间,具体取决于可视树的布局和组成.
所以你不能阻止它被父母开除.您可以使用IsMouseDirectlyOver属性来查看鼠标实际上是否仅在给定元素上方.