我正在尝试为TabItem标头创建自定义样式。我偶然让它上班了。
这失败了:
<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3" x:Key="test">
但这有效
<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3">
发生了什么事?
答案 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
。