我有一个带有两个不同潜在项目模板的标签控件:
<TabControl ItemTemplateSelector="{StaticResource tabTemplateSelector}"/>
现在,我也有它的风格:
<Style TargetType="{x:Type TabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
...
问题是,我希望标签项样式模板根据ItemTemplateSelector
的值而不同。我怎样才能做到这一点?基本上,我不希望将整个样式规则应用于每个标签项,只是具有特定标签项模板的标签项。
更新:为了更清晰,样式的TargetType
设置为TabItem
。我想将该样式仅应用于具有特定项目模板的选项卡项。
答案 0 :(得分:1)
ContentPresenter
中的ControlTemplate
会显示ItemTemplate
中的内容。因此,您无法在Template
内切换ControlTemplate
。
相反,您可以使用DataTrigger
来设置Template
。 DataTrigger
会检查将生成的ItemTemplate
是否应该包含其他Template
。
你可能需要一个转换器,但这是一个简单的例子。如果ItemTemplateSelector
等于“标签2”,请说明DataTemplate
会返回另一个Name
。然后,Style
与DataTrigger
的{{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>