如何在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 颜色

以编程方式使用 C# 更改网格面板边框颜色 - WPF

QQ的一些图标是隐藏了按钮的边框 但是鼠标放在上面又出现了 想问一下如何用WPF实现的

WPF 从 C# 代码设置文本框边框颜色

如果 EditText 字段中有文本,如何更改 backgroundtint 颜色?

单个 div 上的多个 onclick 事件 - 更改 div 边框颜色 - javascript