【问题标题】:Different tab style depending on tab item template?根据选项卡项目模板不同的选项卡样式?
【发布时间】:2012-06-17 21:44:31
【问题描述】:

我有一个带有两个不同潜在项目模板的选项卡控件:

<TabControl ItemTemplateSelector="{StaticResource tabTemplateSelector}"/>

现在,我也有它的样式:

<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                ...

问题是,我希望标签项样式模板根据ItemTemplateSelector 的值而有所不同。我怎样才能做到这一点?基本上,我不希望将整个样式规则应用于每个选项卡项,而只是那些具有特定选项卡项模板的项。

更新:为了更清楚,样式已将TargetType 设置为TabItem。我只想将该样式应用于那些具有特定项目模板的选项卡项目。

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

    ControlTemplate 中的ContentPresenter 将显示ItemTemplate 中的内容。因此,您将无法从ControlTemplate 内部切换Template

    相反,您可以使用DataTrigger 来设置TemplateDataTrigger 将检查将生成的ItemTemplate 是否应该有另一个Template

    您可能需要一个转换器,但这里有一个简单的示例。如果Name 等于“Tab 2”,则假设您的ItemTemplateSelector 返回另一个DataTemplate。然后你的StyleDataTrigger 看起来像这样

    <Style TargetType="TabItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TabItem">
                    <!-- Your first Template -->
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <DataTrigger Binding="{Binding Name}" Value="Tab 2">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="TabItem">
                            <!-- Your other Template -->
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
    

    【讨论】: