最近,我正在制作一个用于聊天的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();
}
}
}
我想当鼠标悬停在边框上时更改边框画笔。 如何让工作顺利进行?
鼠标悬停事件的工作原理是检测鼠标是否位于控件的渲染像素上。这样做的优点是,例如,如果您制作一个带有边框的圆形按钮,您将只能在内部部分中单击它,而不能在其外部单击它。在本例中,您可以单击蓝色部分,但不能单击红色部分。
出现这种情况是因为边框之外的颜色为“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>