为什么x:Key取消应用我的TabItem样式

时间:2011-06-17 14:50:13

标签: wpf xaml styles

我正在尝试为TabItem标头创建自定义样式。我偶然让它上班了。

这失败了:

<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3" x:Key="test"> 

但这有效

<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3"> 

发生了什么事?

2 个答案:

答案 0 :(得分:1)

如果在没有键的情况下将样式添加到资源字典,则默认情况下样式将应用于资源字典范围内的所有TabItem。如果您在样式中添加一个键,则需要手动设置样式

答案 1 :(得分:1)

您定义的第一个样式是“显式”样式,因此您必须明确地使用它:

<TabItem Style="{StaticResource test}" />

您定义的第二个样式是“隐式”样式。因此它将应用于可视/逻辑树中它下面的所有TabItem控件,或者应用于所有TabItem控件(如果它在应用程序资源中定义)。

你的第二种风格相当于:

<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3" x:Key="{x:Type TabItem}">

因此,键是应该应用它的对象的类型。

如果TabItem具有明确定义的样式(如上所示),则不会使用任何隐式样式。此外,如果您定义了两个隐式样式,则最接近的样式将获胜。所以这里:

<Window>
    <Window.Resources>
        <Style TargetType="{x:Type TabItem}"> 
            <Setter Property="Background" Value="Red" />
        </Style>
    </Window.Resources>
    <Grid>
        <Grid.Resources>
             <Style TargetType="{x:Type TabItem}"> 
                 <Setter Property="Background" Value="Blue" />
            </Style>
        </Grid.Resources>
        ...
        <TabItem ... />
        ...
    </Grid>
</Window>

蓝色风格优先于红色风格。

最后,您通常不需要在样式中加入x:Name