ContentPresenter触发器无法正常工作

时间:2012-06-17 01:23:53

标签: wpf controltemplate contentpresenter

我在ControlTemplate中有一个ContentPresenter,试图布局一个TabItem。我希望标题内的TextBlock的前景色在选择选项卡时改变颜色。我的模板如下:

<TabControl.Resources>
    <Style TargetType="TabPanel">
        <Setter Property="HorizontalAlignment" Value="Right" />
    </Style>
    <Style TargetType="TabControl">
        <Setter Property="BorderThickness" Value="0,0,0,0"></Setter>
    </Style>
    <Style TargetType="TabItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <ContentPresenter x:Name="ContentSite"
                                         VerticalAlignment="Center"
                                         HorizontalAlignment="Center"
                                         ContentSource="Header"
                                         Margin="30,10,30,10"/>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="ContentSite" Property="TextBlock.Foreground" Value="DarkGoldenrod"></Setter>
                        </Trigger>    
                        <Trigger Property="IsSelected" Value="False">
                            <Setter TargetName="ContentSite" Property="TextBlock.Foreground" Value="Black"></Setter>
                        </Trigger>    
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</TabControl.Resources>

不幸的是,触发器什么也没做。 SO上的其他几个帖子显示的Setter标记看起来与我的完全相同,使用TargetName确保我们只更改标题而不是整个标签。该财产得到承认和编制,但没有任何反应。

到底发生了什么,我做错了什么?这让我疯了好几个小时!

2 个答案:

答案 0 :(得分:2)

知道了!

我有这样的标题:

<TabItem.Header>
    <TextBlock>My Header</TextBlock>
</TabItem.Header>

问题是,标题内部的已经一个TextBlock,你不需要再次包装文本。

<TabItem.Header>
    My Header
</TabItem.Header>

它有效。

答案 1 :(得分:1)

完全按照我的预期工作,你的问题可能在其他地方撒谎......