继承风格

通常需要一种基本样式来定义属于同一控件的多个样式之间共享的属性/值,尤其是像 TextBlock 这样的东西。这是通过使用 BasedOn 属性来完成的。值是继承的,然后可以被覆盖。

<Style x:Key="BaseTextBlockStyle" TargetType="TextBlock">
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFBBBBBB" />
    <Setter Property="FontFamily" Value="Arial" />
</Style>

<Style x:Key="WarningTextBlockStyle"
       TargetType="TextBlock"
       BasedOn="{StaticResource BaseTextBlockStyle">
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="FontWeight" Value="Bold" />
</Style>

在上面的例子中,使用 WarningTextBlockStyle 样式的任何 TextBlock 将以红色和粗体显示为 12px Arial。

因为隐式样式有一个与 TargetType 匹配的隐式 x:Key,所以你也可以继承它们:

<!-- Implicit -->
<Style TargetType="TextBlock">
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFBBBBBB" />
    <Setter Property="FontFamily" Value="Arial" />
</Style>

<Style x:Key="WarningTextBlockStyle"
       TargetType="TextBlock"
       BasedOn="{StaticResource {x:Type TextBlock}}">
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="FontWeight" Value="Bold" />
</Style>