如何在WPF中使用触发器更改边框颜色?

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

我需要在鼠标悬停时更改一个文本框的边框颜色,但是使用解决方案我写它不起作用。我的代码中有错误吗?背景颜色改变,但边框没有。

下面的代码是我的想法。

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

wpf textbox border
2个回答
1
投票

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

0
投票

按钮边框的颜色由按钮的模板触发器通过按钮(模板化父级)属性控制。由于此类触发器的优先级几乎是最重要的,因此您需要重新定义按钮的控件模板。

https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-property-value-precedence

© www.soinside.com 2019 - 2024. All rights reserved.