如何在WPF中使用触发器更改边框颜色?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在WPF中使用触发器更改边框颜色?相关的知识,希望对你有一定的参考价值。
我需要在鼠标悬停时更改一个文本框的边框颜色,但是使用解决方案我写它不起作用。我的代码中有错误吗?背景颜色改变,但边框没有。
下面的代码是我的想法。
<Style x:Key="BorderColor" TargetType="TextBox">
<Setter Property="FontStyle" Value="Normal"/>
<Style.Triggers>
<Trigger Property="TextBox.IsMouseOver" Value="true">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="Background" Value="LightBlue"/>
</Trigger>
</Style.Triggers>
答案
一种快速简便的方法是简单地将TextBox边框粗细设置为0并将其封装在父边框中:
<Border BorderThickness="1" Width="500" Height="20" >
<Border.Style>
<Style TargetType="{x:Type Border}">
<Setter Property="BorderBrush" Value="Black" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBox x:Name="theTextBox" BorderThickness="0" />
</Border>
这样做的“正确”方法是template the entire control:
<Style TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" TargetName="border" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
另一答案
按钮边框的颜色由按钮的模板触发器通过按钮(模板化父级)属性控制。由于此类触发器的优先级几乎是最重要的,因此您需要重新定义按钮的控件模板。
https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-property-value-precedence
以上是关于如何在WPF中使用触发器更改边框颜色?的主要内容,如果未能解决你的问题,请参考以下文章
WPF 样式:如何更改触发器中的 GradientStop 颜色
QQ的一些图标是隐藏了按钮的边框 但是鼠标放在上面又出现了 想问一下如何用WPF实现的