不同的标签样式取决于标签项模板?

时间:2012-06-17 10:46:22

标签: c# .net wpf

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

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

现在,我也有它的风格:

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

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

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

1 个答案:

答案 0 :(得分:1)

ContentPresenter中的ControlTemplate会显示ItemTemplate中的内容。因此,您无法在Template内切换ControlTemplate

相反,您可以使用DataTrigger来设置TemplateDataTrigger会检查将生成的ItemTemplate是否应该包含其他Template

你可能需要一个转换器,但这是一个简单的例子。如果ItemTemplateSelector等于“标签2”,请说明DataTemplate会返回另一个Name。然后,StyleDataTrigger的{​​{1}}看起来像这样

<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>