基于动态资源的风格

时间:2010-09-22 17:46:09

标签: c# wpf

似乎不允许这样的事情。任何解决方法?

  <Style x:Key=MyDerivedStyle TargetType="{x:Type Button}"
         BasedOn="{DynamicResource GlobalButtonStyle}" />       

  <Style x:Key="GlobalLabelStyle" TargetType="{x:Type Button}">

我收到错误: 无法在“Style”类型的“BasedOn”属性上设置“DynamicResourceExtension”。 'DynamicResourceExtension'只能在DependencyObject的DependencyProperty上设置。

如果我将其更改为StaticResource,则该样式不会出现在我的控件中。

2 个答案:

答案 0 :(得分:4)

这里有两个问题:

首先,您的全局样式需要出现在派生样式之前(在相同的资源部分中,或者在尝试定义派生样式之前合并到适当的ResourceDictionary中。

此外,您需要在按钮中明确定义样式:

<Button x:Name="btnOne"
        Style="{StaticResource MyDerivedStyle}"
        Content="Derived" />

请注意,在这种情况下,您不会创建动态资源(即需要重新加载的资源)。它是静态的,因为用于基于OnOn的Style需要。

答案 1 :(得分:2)

首先你需要放置基础风格,之后使用这种低音风格的风格:

<Style x:Key="ComboBoxItemStyleSpecial"
       BasedOn="{StaticResource ComboBoxItemStyleDefault}"
       TargetType="{x:Type ComboBoxItem}">
    <Setter Property="BorderBrush"
            Value="Lime" />
    <Setter Property="BorderThickness"
            Value="3" />
</Style>
<Style x:Key="ComboBoxItemStyleSpecialFont"
       BasedOn="{StaticResource ComboBoxItemStyleSpecial}"
       TargetType="{x:Type ComboBoxItem}">
    <Setter Property="FontSize"
            Value="40" />
    <Setter Property="FontFamily"
            Value="Aharoni" />
</Style>