在 wpf 中设置子元素的边距时,IsMouseOver 属性不起作用

问题描述 投票:0回答:1

最近,我正在制作一个用于聊天的wpf应用程序。我想当鼠标悬停在边框上时更改边框画笔颜色。但是,由于边距或填充设置,我的代码无法正常工作。

示例代码如下:

主窗口.xaml

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TextBlock Text="Test" Name="testBlock"/>

        <Border Name="test" BorderThickness="1" Width="300" Height="200">

            <TextBlock Text="Test1" Margin="30"/>


            <Border.Style>
                <Style TargetType="Border">
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="BorderBrush" Value="Red"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="False">
                            <Setter Property="BorderBrush" Value="Yellow"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>
    </Grid>
</Window>

MainWindow.xaml.cs

namespace WpfApp1
{
    public partial class MainWindow : Window
    {


        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

我想当鼠标悬停在边框上时更改边框画笔。 如何让工作顺利进行?

c# wpf
1个回答
6
投票

鼠标悬停事件的工作原理是检测鼠标是否位于控件的渲染像素上。这样做的优点是,例如,如果您制作一个带有边框的圆形按钮,您将只能在内部部分中单击它,而不能在其外部单击它。在本例中,您可以单击蓝色部分,但不能单击红色部分。

出现这种情况是因为边框之外的颜色为“null”,不会被渲染。通过将其设置为透明,它将被渲染,从而能够触发鼠标悬停事件。

这会起作用:

        <Border Name="test" BorderThickness="1" Width="300" Height="200" Background="Transparent">
            <TextBlock Text="Test1" Margin="30"/>
            <Border.Style>
                <Style TargetType="Border">
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="BorderBrush" Value="Red"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="False">
                            <Setter Property="BorderBrush" Value="Yellow"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Style>
        </Border>
© www.soinside.com 2019 - 2024. All rights reserved.