当我尝试使用以下(简化)样式对焦点BorderBrush
设置不同的TextBox
时,它不起作用。
<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>
但是,如果不是设置不同的BorderBrush
,我会尝试例如设置Background
(即<Setter Property="Background" Value="Red" />
)确实有效。
我尝试了解决方案,说我应该尝试将BorderThickness
设置为0.99
或1.01
,如here和here所述,但它们不起作用对我来说。
任何帮助都很高兴。
答案 0 :(得分:4)
正在发生的事情是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>