Danny Beckett
Danny Beckett

Reputation: 20838

Default style for TextBlock not being picked up after applying a style key

I have a <ResourceDictionary> containing this:

<Style TargetType="TextBlock">
    <Setter Property="FontFamily" Value="..\..\Fonts\#Roboto"/>
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="TextWrapping" Value="Wrap"/>
</Style>

This works fine.

Now I've added another style:

<Style x:Key="MyText" TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="FontWeight" Value="SemiBold"/>
</Style>

However, after changing my <TextBlock> to <TextBlock Style="{StaticResource MyText}"/> - only the styles within the 2nd style block are picked up. E.g. the FontFamily, FontSize and TextWrapping are now ignored.

How can I have a default for a TextBlock, and then add to it? I don't want to add an x:Key to the 'default' style as this is in use throughout the system already.

Upvotes: 1

Views: 127

Answers (1)

Mark W
Mark W

Reputation: 1050

I think you just need to base your keyed style on the type. See example below.

Note the BasedOn="{StaticResource {x:Type TextBlock}}"

<Window.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="FontSize" Value="14"/>
        <Setter Property="Foreground" Value="Green" />
        <Setter Property="TextWrapping" Value="Wrap"/>
    </Style>
    <Style x:Key="MyText" TargetType="TextBlock">
        <Setter Property="Foreground" Value="Red"/>
        <Setter Property="FontWeight" Value="SemiBold"/>
    </Style>
    <Style x:Key="MyAppendedStyles" TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}">
        <Setter Property="Foreground" Value="Red"/>
        <Setter Property="FontWeight" Value="SemiBold"/>
    </Style>
</Window.Resources>
<StackPanel>
    <TextBlock Text="Hello" />
    <TextBlock Style="{StaticResource MyText}" Text="Style Key" />
    <TextBlock Style="{StaticResource MyAppendedStyles}" Text="Style Key" />
</StackPanel>

Upvotes: 3

Related Questions