首页 > 解决方案 > 如何使用 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>

标签: wpftextboxborder

解决方案


一种快速简便的方法是简单地将 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>

执行此操作的“正确”方法是将整个控件模板化

<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>

推荐阅读