为什么x:Key不适用于我的TabItem样式



我正在尝试为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,则需要手动设置样式

相关内容

  • 没有找到相关文章

最新更新