使用Blend和WPF更改聚焦文本框的边框样式

时间:2011-01-06 05:28:31

标签: c# wpf expression-blend

我已经对此进行了长时间的讨论。有人可以使用Expression Blend向我解释,如何编辑/覆盖文本框的默认FocusVisualStyle?目前我的所有文本框在选中时都有蓝色调,这与我当前应用程序的主题不符,但我无法弄清楚如何覆盖它。我想我已经在各种模板,事件和属性中的大约10个不同的地方设置了边框画笔,它只是不会覆盖。

编辑:按钮也是这样做的,它看起来更难看。我想要一个包含所有控件的解决方案。

Blend的一组方向比粘贴XAML更好,但此时我不会挑剔。

2 个答案:

答案 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,因此它不会消除别名,但这是可选的。执行此操作后,要更改文本框的边框或背景颜色,请使用模板。但是要更改文本的前景色,请改用对象实例(而不是模板)。