我有一个具有自定义 TabItem 样式的父 TabControl:
<TabControl ItemsSource="{Binding TabViewModels}" SelectedIndex="0" Padding="0,0,0,0" BorderThickness="0,0,0,0" Panel.ZIndex="1">
<TabControl.Resources>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}" >
<Border Name="Border" CornerRadius="6,6,0,0" Margin="0,0,2,2">
<ContentPresenter TextBlock.TextAlignment="Center" TextBlock.FontSize="14"
Height="40" Width="auto" Content="{Binding Path=TabName}" Margin="12,2,12,2"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Border" Property="Background" Value="#00B6FA" />
</Trigger>
<Trigger Property="IsSelected" Value="False">
<Setter TargetName="Border" Property="Background" Value="LightGray" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="TabPanel">
<Setter Property="HorizontalAlignment" Value="Right"/>
</Style>
</TabControl.Resources>
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding Path=. }"/>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
在父 TabControl 的一个选项卡中,我有一个子 TabControl。问题是子 TabControl 自动采用自定义 TabItem 样式,因为我覆盖了它,如您在上面看到的那样。我想要的是子 TabControl 采用 TabItem 的默认窗口样式。是否可以应用自定义选项卡项而不是覆盖它并使用项源?
您可以通过嵌套TabControl
的 Style
属性指定样式:
<TabControl Style="{DynamicResource ResourceKey={x:Type TabControl}}">
...
</TabControl>
默认样式键通常是控件的类型,因此{x:Type TabControl}
。
更新:
我假设您正在对选项卡项使用所谓的隐式样式,该样式在顶级TabControl
的资源字典中定义。通过隐式样式,我理解一种没有键且指定TargetType
的样式。要将默认样式应用于特定嵌套TabControl
中的TabItem
控件,只需将空的隐式样式添加到其资源字典中,如下所示:
<TabControl x:Name="OuterTabControl">
<TabControl.Resources>
<Style TargetType="TabItem">
<!-- your style definition -->
</Style>
</TabControl.Resources>
...
<TabControl x:Name="InnerTabControl">
<TabControl.Resources>
<Style TargetType="TabItem"/>
</TabControl.Resources>
</TabControl>
...
</TabControl>
若要避免取消嵌套选项卡控件的样式,请参阅 AnjumSKhan 的答案,该答案将外部控件的样式放在触发器中,该触发器的绑定巧妙地仅针对一个控件:
<TabControl.Resources>
<Style TargetType="TabItem">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabControl, AncestorLevel=2}}" Value="{x:Null}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Border Name="Border" Background="Red">
<ContentPresenter ContentSource="Header"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style> </TabControl.Resources>