WPF:如何从ItemContainerStyle中的基本(或默认)样式继承

时间:2013-05-30 12:20:34

标签: wpf styles inheritance itemcontainerstyle

我无法继承TabControl的ItemContainerStyle中的默认样式。

目的是继承主题风格,只改变一些属性。

如果我编写此XAML代码,则使用默认的TabItem样式,但不使用主题。 你知道为什么吗?

<TabControl>

    <TabControl.Resources>
        <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
            <Setter Property="Background" Value="DarkBlue"/>
        </Style>
    </TabControl.Resources>

    <TabControl.ItemContainerStyle>
        <Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">
            <Setter Property="Background" Value="Blue"/>
            <Setter Property="Foreground" Value="Red"/>
        </Style>
    </TabControl.ItemContainerStyle>

    <TabItem Header="Tab 1"/>
    <TabItem Header="Tab 2"/>
    <TabItem Header="Tab 3"/>
    <TabItem Header="Tab 4"/>

</TabControl>

PS:在资源中为Button做同样的事情很有效。怎么没有TabItem样式?与ItemContainerStyle有关吗?

PS2:我的主题样式(默认样式)存储在应用程序资源中。

由于

编辑1

您可以在我的保管箱上找到示例项目: https://dl.dropboxusercontent.com/u/61987557/InheritDefaultStyle.zip

2 个答案:

答案 0 :(得分:0)

我猜TabItemStyle和ItemContainerStyle是两回事 ItemContainerStyle 应用于为每个项目生成的容器元素。 而你试图在ItemContainerStyle中设置TabItemStyle。

答案 1 :(得分:0)

为TabItem的样式定义一个键:

<Style TargetType="{x:Type TabItem}" x:Key="StandardTabItemControl">
...
</Style>

然后使用此密钥继承它:

<TabControl.ItemContainerStyle>
   <Style TargetType="TabItem" BasedOn="{StaticResource StandardTabItemControl}">
         ...
   </Style>
</TabControl.ItemContainerStyle>