WPF 中 Border 的奇怪 MouseEnter、MouseLeave 行为

Weird MouseEnter, MouseLeave behaviour of Border in WPF

提问人:esege 提问时间:4/5/2023 最后编辑:esege 更新时间:4/5/2023 访问量:50

问:

这是 XAML 部分。

<StackPanel Orientation="Vertical">
        <Border Name="myBorder"
                BorderBrush="Black"
                BorderThickness="2"
                Width="100"
                Height="100"
                MouseEnter="MyBorder_OnMouseEnter"
                MouseLeave="MyBorder_OnMouseLeave">
        </Border>

        <StackPanel Width="150"
                    Height="150"
                    Background="Red"
                    MouseEnter="StackPanel_OnMouseEnter"
                    MouseLeave="StackPanel_OnMouseLeave"/>
</StackPanel>

下面是 C# 部分

       private void MyBorder_OnMouseEnter(object sender, MouseEventArgs e)
        {
            Debug.WriteLine("MyBorder_OnMouseEnter");
        }

        private void MyBorder_OnMouseLeave(object sender, MouseEventArgs e)
        {
            Debug.WriteLine("MyBorder_OnMouseLeave");
        }

        private void StackPanel_OnMouseEnter(object sender, MouseEventArgs e)
        {
            Debug.WriteLine("UIElement_OnMouseEnter");
        }

        private void StackPanel_OnMouseLeave(object sender, MouseEventArgs e)
        {
            Debug.WriteLine("UIElement_OnMouseLeave");
        }

当我将鼠标悬停在边框元素 MouseEnter 上时,MouseLeave 事件会同时触发这两个事件。当鼠标离开边框 MouseEnter 时,MouseLeave 事件将再次触发。使用 stackpanel,它的行为方式符合我的预期。为什么会这样?

观看此视频以查看行为

C# WPF XAML 事件 边框

评论

1赞 mm8 4/5/2023
尝试将 .BackgroundBorder
0赞 esege 4/5/2023
了不起。问题解决了。谢谢!

答:

1赞 mm8 4/5/2023 #1

如果未将 的属性设置为 ,则未绘制的区域将被视为属于父元素。BackgroundBorderBrush

如果将 设置为 ,事件将按预期引发:BackgroundTransparent

<Border Name="myBorder"
    Background="Transparent"
    BorderBrush="Black"
    BorderThickness="2"
    Width="100"
    Height="100"
    MouseEnter="MyBorder_OnMouseEnter"
    MouseLeave="MyBorder_OnMouseLeave">