我正在尝试为TabItem Header创建一个自定义样式。我不小心让它工作了。
此操作失败:
<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3" x:Key="test">
但这对有效
<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3">
怎么回事?
您定义的第一个样式是"显式"样式,因此您必须像这样显式使用它:
<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
。
如果将样式添加到不带键的资源字典中,则默认情况下,该样式将应用于资源字典范围内的所有TabItems。如果向样式添加Key,则需要手动设置样式