在WPF中,如何防止我的样式被覆盖?

时间:2009-10-19 13:38:54

标签: wpf styling

请不要陷入我的榜样,只是为了这个问题而忍受我:

在我的WPF应用程序中,如果我希望所有TextBox都具有“绿色”背景,我可以在Application.Resources中轻松设置它。

<Style TargetType="TextBox">
 <Setter Property="Background" Value="Green" />
</Style>

这可以完美 ...(谢谢WPF)。但是,如果我在我的应用程序中的某处有一个TextBox,我想添加更多样式来...我 LOSE 我的绿色背景。

示例:

<TextBox>
 <TextBox.Style>
  <Style>
   <Style.Triggers>
    <Trigger Property="TextBox.IsMouseOver" Value="True">
     <Setter Property="TextBox.Foreground" Value="Red" />
    </Trigger>
  </Style.Triggers>
  </Style>
 </TextBox.Style>
</TextBox>

当鼠标结束时,TextBox将正确显示红色前景,但绿色背景完全丢失。

所以,问题是:我如何告诉WPF不要完全消除上面出现的所有样式,因为我有一个简单的,非冲突的,非常小的风格添加到某个控件?

1 个答案:

答案 0 :(得分:11)

您可以使用样式声明中的“BasedOn”继承已经覆盖的样式。

在第二种风格的声明中,试试这个:

<TextBox>
 <TextBox.Style>
  <Style BasedOn="{StaticResource {x:Type TextBox}}">
   <Style.Triggers>
    <Trigger Property="TextBox.IsMouseOver" Value="True">
     <Setter Property="TextBox.Foreground" Value="Red" />
    </Trigger>
  </Style.Triggers>
  </Style>
 </TextBox.Style>
</TextBox>

您还可以将样式基于命名样式

<Style x:Key=MyNamedStyle>
</Style>

<Style BasedOn="{StaticResource MyNamedStyle}" >
</Style>