Wpf, style is not being applied

Viewed 4978

I've written a user control with popup, who's content is being set outside the control. The ControlTemplate of that control looks like the following:

<ControlTemplate TargetType="local:InfoIcon">
    <Grid>
        <ToggleButton x:Name="HelpButton" Style="{StaticResource HelpButton}" />
        <Popup PlacementTarget="{Binding ElementName=HelpButton}" Placement="Bottom"
                IsOpen="{Binding ElementName=HelpButton, Path=IsChecked, Mode=TwoWay}" StaysOpen="False">
            <Border BorderBrush="#767676" BorderThickness="1" 
                    Background="#f1f2f7">
                <Border.Resources>

                    <!-- Important -->
                    <Style TargetType="Label">
                        <Setter Property="Foreground" Value="#575757" />
                    </Style>
                    <Style TargetType="TextBlock">
                        <Setter Property="Foreground" Value="#575757" />
                    </Style>
                    <!-- /Important -->

                </Border.Resources>
                <ContentPresenter Content="{TemplateBinding HelpContent}" />
            </Border>
        </Popup>                                   
    </Grid>
</ControlTemplate>

The Important part - I want to assign custom styles to items, which are being put inside the popup (it serves as a clickable hint)

I'm using my control in the following way:

<local:MyControl>
    <local:MyControl.HelpContent>
        <TextBlock>Ala ma kota</TextBlock>
    </local:MyControl.HelpContent>
</local:MyControl>

But despite styles in the Border, TextBlock's text's color always inherit the value from its parent (checked using Snoop) - resulting in white text on white background.

You can downlad the small PoC application, which demonstrates the problem.

My observations:

  • The styling does work for Label. It only doesn't work for TextBlock.
  • When I add TextBlock.Foreground="Red" to the Border, TextBlock becomes red, still ignoring style (but now using color from Border).
  • Snoop informs, that this TextBlock actually has the Style resolved correctly. But despite it shouldn't, it uses the inherited value instead of one specified in the style.

How can I solve this problem and why does it occur?

6 Answers
Related