Welcome to 16892 Developer Community-Open, Learning,Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

Consider the following simple XAML:

<TextBlock x:Class="MyTextBlock"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           Foreground="Red">
</TextBlock>

And the associated C# code:

public partial class MyTextBlock : TextBlock
{
    public MyTextBlock()
    {
    }
}

Why does the Foreground="Red" part not work when I then do <MyTextBlock Text="Foo"/> in my application? I know there are plenty of other ways to do it in code, but I have trouble understanding what is happening exactly here.

I have also tried the following XAML:

<TextBlock x:Class="MyTextBlock"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Foreground" Value="Red"/>
        </Style>
    </TextBlock.Style>
</TextBlock>

And finally this one:

<TextBlock x:Class="MyTextBlock"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <TextBlock.Resources>
        <Style x:Key="MyTextBlockStyle" TargetType="{x:Type TextBlock}">
            <Setter Property="Foreground" Value="Red"/>
        </Style>
    </TextBlock.Resources>
    <TextBlock.Style>
        <DynamicResource ResourceKey="MyTextBlockStyle"/>
    </TextBlock.Style>
</TextBlock>

Again, neither of these appear to apply the style. Why is that? Is there a way to declare some kind of default style for the root element in XAML?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
3.5k views
Welcome To Ask or Share your Answers For Others

1 Answer

Why does the Foreground="Red" part not work when I then do <MyTextBlock Text="Foo"/> in my application?

It works if you call InitializeComponent():

public partial class MyTextBlock : TextBlock
{
    public MyTextBlock()
    {
        InitializeComponent();
    }
}

Local values take precedence over Style setters.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to 16892 Developer Community-Open, Learning and Share
...