C# 在Wpf文本框获得Focus()时更改其聚焦边框颜色
我想要的是:当任何文本框都有焦点时,将边框颜色更改为黄色 我尝试的是:C# 在Wpf文本框获得Focus()时更改其聚焦边框颜色,c#,wpf,vb.net,C#,Wpf,Vb.net,我想要的是:当任何文本框都有焦点时,将边框颜色更改为黄色 我尝试的是: <Window.Resources> <Style TargetType="TextBox"> <Style.Triggers> <Trigger Property="IsFocused" Value="True"> <Setter Property="BorderBrush" Value="
<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>
没有快乐。无法理解为什么边框保持蓝色。
这与类似,但不是的副本。您需要修改文本框的控件模板。仅向样式添加触发器是不够的。这应该起作用:
<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>
您可以在WPF源代码中找到原始样式模板:太棒了!现在,如果我可以问的话,请解释一下这是如何工作的,为什么我的代码没有工作#我应该补充一点,我以前尝试过控件模板,但只通过删除所有样式成功地删除了文本框-/您的代码不起作用,因为TextBox的默认控件模板为IsKeyboardFocused属性定义了一个DataTrigger,该属性将BorderBrush属性设置为硬编码的笔刷值。这就是为什么需要覆盖整个模板。