2

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

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

现在,我也有它的样式:

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

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

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

4

1 回答 1

1

ContentPresenter中的将ControlTemplate显示 中的内容ItemTemplate。因此,您将无法TemplateControlTemplate.

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

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

<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>
于 2012-06-17T13:27:39.360 回答