WPF 触发器 TextBox BorderBrush 不起作用

Tho*_*kow 0 wpf triggers textbox

当我尝试使用以下(简化)样式为其聚焦时设置不同时BorderBrushTextBox它不起作用。

<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">        
    <Style.Triggers>            
        <Trigger Property="IsFocused" Value="True">
            <Setter Property="BorderBrush" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

但是,如果不是设置不同的BorderBrush我尝试设置Background(即<Setter Property="Background" Value="Red" />)它确实有效。

我尝试了解决方案,说我应该尝试将 设置BorderThickness为类似0.991.01如此此处所述的内容,但它们对我不起作用。

任何帮助都非常感谢。

小智 5

发生的事情是TextBoxBase有一些触发器IsFocused,因此您的触发器被默认触发器覆盖。

您应该修改TextBoxBase模板并将触发器放在那里以实现您想要的:

<TextBox.Style>
    <Style
        TargetType="{x:Type TextBox}">
        <Setter
            Property="Template">
            <Setter.Value>
                <ControlTemplate
                    TargetType="{x:Type TextBoxBase}">
                    <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="IsFocused"
                            Value="True">
                            <Setter
                                Property="BorderBrush"
                                Value="Red" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

    </Style>
</TextBox.Style>
Run Code Online (Sandbox Code Playgroud)