WPF TabItem HeaderTemplate样式应用不一致

时间:2016-10-28 19:59:32

标签: c# wpf datatemplate

当我按照其他SO答案提供的步骤来设置标签项标题的样式时,我会遇到一些奇怪的行为。 与

<Style TargetType="{x:Type TabItem}">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate DataType="{x:Type TabItem}">
                <buttons:MyButtonControl Content="{TemplateBinding Content}" />
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

选项卡控件如下

<TabControl>
    <TabItem Header="Buttons">
        <local:Buttons />
    </TabItem>
    <TabItem Header="Labels">
        <local:Labels />
    </TabItem>
</TabControl>

我得到一个看起来像这样的标签控件

Tab control

如何将样式应用于所有标签页?如何删除数据模板周围的默认选项卡标题样式?

修改

如果我设置模板的样式而不是标题模板,则内容会停止显示,但至少边框会在有效的标题上消失。

<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <buttons:MyButtonControl Content="{TemplateBinding Content}" />
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

Tab Control after edit

1 个答案:

答案 0 :(得分:1)

缺少的部分似乎是ContentPresenterContentSource属性设置为标题。

(同样使用标题中的按钮可防止单击该标签,因为该按钮会触发单击事件。)

此代码显示正确。

<Style TargetType="TabItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <Border>
                    <ContentPresenter ContentSource="Header">
                        <ContentPresenter.ContentTemplate>
                            <DataTemplate>
                                <TextBlock Text="{TemplateBinding Content}" />
                            </DataTemplate>
                        </ContentPresenter.ContentTemplate>
                    </ContentPresenter>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>