代码之家  ›  专栏  ›  技术社区  ›  HAdes

如何从资源字典继承/扩展样式?

  •  3
  • HAdes  · 技术社区  · 14 年前

    我无法扩展我在Windows字典中定义的一种样式。仅此而已,它似乎像预期的那样将样式应用于控件。但是,如果尝试在我的一个用户控件中使用basedon属性扩展样式,那么它只会覆盖主样式,而所有的基本样式都会被取消。下面是一个例子:

    在名为dict1.xaml的资源字典中:

    <Style TargetType="{x:Type Button}">
        <Setter Property="Background" Value="Pink"/>
    </Style>  
    

    在主窗口中.xaml:

    <Window.Resources>
        <ResourceDictionary Source="dict1.xaml"/>
    </Window.Resources>
    

    在名为usercontrol1.xaml的用户控件中:

    <UserControl.Resources>
        <Style  BasedOn="{StaticResource {x:Type Button}}" 
                TargetType="{x:Type Button}">
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
    </UserControl.Resources>
    

    用户控件中的样式仅覆盖资源字典中的样式,字体为粗体。如果删除用户控件中的样式,字典中的样式将生效,背景将变为粉红色。我两个都想要。

    你知道我在这里做错什么吗?

    谢谢。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Jay    14 年前

    您要么需要将字典添加到UserControl资源中,要么将其添加到app.xaml资源中。

    实际上,UserControl无法解析该StaticResource——如果这有意义的话,它在UserControl的范围内,而不是窗口内。