【问题标题】:Why does x:Key unapply my TabItem Style为什么 x:Key 不应用我的 TabItem 样式
【发布时间】:2011-06-17 14:50:13
【问题描述】:

我正在尝试为 TabItem 标头制作自定义样式。我无意中让它工作了。

这失败了:

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

但是这行得通

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

发生了什么事?

【问题讨论】:

    标签: wpf xaml styles


    【解决方案1】:

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

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

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

    你的第二个 Style 相当于:

    <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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        • 2013-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多