我已经对此进行了长时间的讨论。有人可以使用Expression Blend向我解释,如何编辑/覆盖文本框的默认FocusVisualStyle?目前我的所有文本框在选中时都有蓝色调,这与我当前应用程序的主题不符,但我无法弄清楚如何覆盖它。我想我已经在各种模板,事件和属性中的大约10个不同的地方设置了边框画笔,它只是不会覆盖。
编辑:按钮也是这样做的,它看起来更难看。我想要一个包含所有控件的解决方案。
Blend的一组方向比粘贴XAML更好,但此时我不会挑剔。
答案 0 :(得分:1)
您看到的行为实际上是TextBox默认控件模板中存在的ListBoxChrome元素的一部分。您可以使用一个使用BorderBrush属性的简单模板轻松交换它,这是Silverlight的TextBox所做的。
<ControlTemplate TargetType="{x:Type TextBox}">
<Border x:Name="Bd"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="2">
<ScrollViewer x:Name="PART_ContentHost" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
答案 1 :(得分:0)
要添加答案,对于Blend,您可以右键单击“控件”以定义新模板。完成后,在XAML视图中,将生成的<ControlTemplate>
替换为提供的@Josh Einstein。我还在边框上添加了SnapToDevicePixels,因此它不会消除别名,但这是可选的。执行此操作后,要更改文本框的边框或背景颜色,请使用模板。但是要更改文本的前景色,请改用对象实例(而不是模板)。