WPF:通过ControlTemplate和ContentPresenter.Resources将样式应用于自定义TabItem标头时出现问题

时间:2011-06-01 10:32:32

标签: wpf styles controltemplate tabitem contentpresenter

我正在尝试为TabItem Header编写自己的控件模板,并且已经有了基本的布局,但现在我希望将样式应用于Header的内容,例如操作文本块的大小和字体

为了测试这一点,我在tabitem标题中放了一个椭圆,并试图用金色笔刷通过样式填充该椭圆。但是,它不起作用。存在椭圆,并且正在应用控制模板,但椭圆的填充不是金。 ContentPresenter.Resources中的样式被忽略(Resharper甚至将它弄为灰色以证明这一点)。我有什么想法我做错了吗?感谢。

以下是代码:

    <TabItem>
    <TabItem.Template>
        <ControlTemplate x:Name="theTabItemControlTemplate" TargetType="{x:Type TabItem}">
            <Border BorderBrush="DarkBlue" BorderThickness="10">
                <Grid>
                    <ContentPresenter ContentSource="Header" RecognizesAccessKey="True">
                        <ContentPresenter.Resources>
                            <Style TargetType="{x:Type Ellipse}">
                                <Setter Property="Ellipse.Fill" Value="Gold"/>
                            </Style>
                        </ContentPresenter.Resources>
                    </ContentPresenter>
                </Grid>
            </Border>
        </ControlTemplate>
    </TabItem.Template>
    <TabItem.Header>
        <Ellipse Stroke="Black" StrokeThickness="2" Width="100" Height="30" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    </TabItem.Header>
</TabItem>

1 个答案:

答案 0 :(得分:1)

将你的风格向上移动一层。将它移动到ControlTemplate.Resources它会正常工作。我不确定为什么问题中的代码不起作用。可能是因为contentpresenter中的控件已经是在遇到风格时建立。

<ControlTemplate x:Name="theTabItemControlTemplate" TargetType="{x:Type TabItem}">
            <ControlTemplate.Resources>
                <Style TargetType="{x:Type Ellipse}">
                    <Setter Property="Fill" Value="Red"/>
                </Style>
            </ControlTemplate.Resources>
            <Border BorderBrush="DarkBlue" BorderThickness="10">
        <Grid>
            <ContentPresenter ContentSource="Header" RecognizesAccessKey="True">

            </ContentPresenter>
        </Grid>
    </Border>
</ControlTemplate>