在GotFocus()时改变Wpf文本框的聚焦边框颜色

DrD*_*nit 5 c# vb.net wpf

我想要的:当任何文本框具有焦点时,将边框颜色更改为黄色.

我尝试了什么:

<Window.Resources>
    <Style TargetType="TextBox">
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="BorderBrush" Value="Yellow"></Setter>
                <Setter Property="BorderThickness" Value="1"></Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

没有快乐.无法弄清楚为什么边界仍然是蓝色的.这是类似的,但不重复如何在焦点具有焦点时更改TextBox边框的颜色?.

mm8*_*mm8 17

您需要修改TextBox的控件模板.在样式中添加触发器是不够的.这应该工作:

<Style TargetType="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="IsEnabled" Value="false">
                        <Setter Property="Opacity" TargetName="border" Value="0.56"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="BorderBrush" TargetName="border" Value="#FF7EB4EA"/>
                    </Trigger>
                    <Trigger Property="IsFocused" Value="true">
                        <Setter Property="BorderBrush" TargetName="border" Value="Yellow"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

  • 您的代码不起作用,因为 TextBox 的默认控件模板为 IsKeyboardFocused 属性定义了一个 DataTrigger,该属性将 BorderBrush 属性设置为硬编码的画笔值。这就是为什么您需要覆盖整个模板。 (2认同)