2012-06-17 107 views
2

我有两个不同的潜在项目模板标签控件:取决于选项卡项目模板的不同选项卡样式?

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

现在,我也有风格吧:

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

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

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

回答

1

ControlTemplate中的ContentPresenter将显示ItemTemplate中的内容。因此,您将无法从ControlTemplate内切换Template。您可以使用DataTrigger来设置TemplateDataTrigger将检查将生成的ItemTemplate是否应该具有其他Template或不。

您可能需要一个转换器,但这里有一个简单的例子。假设您的ItemTemplateSelector返回其他DataTemplate,如果Name等于“选项卡2”。然后你的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> 
相关问题