2011-01-06 114 views
0

我已经在相当长的一段时间里对此进行了头饰。有人请向我解释如何使用Expression Blend来编辑/覆盖文本框的默认FocusVisualStyle?目前,我的所有文本框在选中时都有蓝色的重音,这与我当前应用程序的主题不符,但我无法弄清楚如何覆盖它。我想我已经在各种模板,事件和属性中的大约10个不同的地方设置了边界笔刷,并且它不会覆盖。使用Blend和WPF更改焦点文本框的边框样式

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

一套用于混合方向最好是把刚粘贴XAML,但在这一点上我不能让挑剔。

回答

1

您所看到的行为实际上是文本框的默认控件模板中存在的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> 
+0

我该怎么处理这个XAML?只需插入它?我正在使用混合,所以混合特定的说明会有帮助... – qJake 2011-01-06 05:42:34

+0

这与Blend没有任何关系。即使有像Blend这样的工具,你也需要对控件模板和样式有一个很好的理解,以便做一些与应用程序相关的事情。您遇到的问题不是可以通过简单的属性设置解决的问题。实际上,您需要更改TextBox控件的控件模板以替换其中的一个部分。 – Josh 2011-01-06 06:06:08

+0

但无论如何,要使上述内容适用于应用程序中的所有文本框,您必须将其放入App.xaml资源字典中。 – Josh 2011-01-06 06:07:45

0

要添加到答案,对于Blend,您可以右键单击控件以定义新的模板。一旦你这样做了,在XAML视图中,将生成的<ControlTemplate>替换为提供的一个@Josh Einstein。我还将SnapToDevicePixels添加到边界上,因此它不会出现反别名,但是这是可选的。完成后,要更改文本框的边框或背景色,请使用模板。但要更改文本的前景色,请改用对象实例(而不是模板)。