繼承風格

通常需要一種基本樣式來定義屬於同一控制元件的多個樣式之間共享的屬性/值,尤其是像 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>