WPF:仅将样式应用于包含其他 tabControl 的一个 tabcontrol

WPF: apply style only to one tabcontrol containing other tabControl

在我的 wpf 应用程序中,我有一个 tabControl(父)包含另一个 tabcontrol(子)。 我想将一种样式应用于父 tabControl 的 tabItem 而不影响子项。 我试过这个:

<TabControl x:Name="Parent" TabStripPlacement="Left" 
            ItemsSource="{Binding Path=ParentTabItems, Mode=OneWay}" >
    <TabControl.Resources>
        <Style TargetType="{x:Type TabItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TabItem}">
                        <!-- template is defined here-->
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style TargetType="{x:Type TabPanel}">
            <Setter Property="VerticalAlignment" Value="Center" />
        </Style>
    </TabControl.Resources>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <ContentPresenter>
                <ContentPresenter.Content>
                    <!--Here there is the child TabControl-->
                </ContentPresenter.Content>
            </ContentPresenter>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

但这会导致将样式也应用到子 tabControl TabItem。 如何使用应用程序中定义的默认样式将样式仅应用于父 tabItem 而保留子 TabControl?

您应该能够使用 TabControl.ItemContainerStyle 在外部 TabControlTabItem 上设置命名 Style。试试这个:

Resources中:

<Style x:Key="ItemStyle" TargetType="{x:Type TabItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabItem}">
                <!-- template is defined here-->
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

...

<TabControl x:Name="Parent" TabStripPlacement="Left" 
    ItemsSource="{Binding Path=ParentTabItems, Mode=OneWay}" 
    ItemContainerStyle="{StaticResource ItemStyle}">
    <TabControl.Resources>
        <Style TargetType="{x:Type TabPanel}">
            <Setter Property="VerticalAlignment" Value="Center" />
        </Style>
    </TabControl.Resources>
</TabControl>