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

3

我在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: 在资源中为按钮执行相同操作非常好,为什么选项卡样式不行?与ItemContainerStyle有关吗?

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

谢谢。

编辑1

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


我尝试了这段代码,似乎可以工作。按钮和选项卡都从App.xaml中选择了基本样式。您还遇到其他特定的问题吗? - Jawahar
你好XAML爱好者,我尝试把这段代码直接放在应用程序中,并将默认的TabItem样式直接包含在App.xaml中,但仍然无法工作。我会上传源代码给你。 - Antoine Jeanrichard
2个回答

0

为您的TabItem样式定义一个键:

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

然后使用这个键从中继承:

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

0

我猜TabItemStyle和ItemContainerStyle是两个不同的东西。 ItemContainerStyle应用于为每个项生成的容器元素。 而你正在尝试在ItemContainerStyle内设置TabItemStyle。


是的,完全正确,但这就是该做的方式,不是吗?我想在库中为我的TabItem设置一个默认样式,但是该库的用户应该能够更改一些属性,比如背景色,而不必重写整个样式。你会用不同的方法来实现吗? - Antoine Jeanrichard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接