C# 基于动态资源的样式

C# 基于动态资源的样式,c#,wpf,C#,Wpf,这似乎是不允许的。有解决办法吗 <Style x:Key=MyDerivedStyle TargetType="{x:Type Button}" BasedOn="{DynamicResource GlobalButtonStyle}" /> <Style x:Key="GlobalLabelStyle" TargetType="{x:Type Button}"> 我得到一个错误: 无法在类型为“Style”的“BasedO

这似乎是不允许的。有解决办法吗

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

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

我得到一个错误: 无法在类型为“Style”的“BasedOn”属性上设置“DynamicResourceExtension”。只能对DependencyObject的DependencyProperty设置“DynamicResourceExtension”

如果将其更改为StaticResource,则该样式不会显示在控件中

这里有两个问题:

首先,您的全局样式需要出现在派生样式之前(在相同的参考资料部分中,或者在尝试定义派生样式之前合并到相应的ResourceDictionary中)

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

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


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

首先,您需要放置基于样式,然后是使用此Bass样式的样式:

<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>

为了进一步澄清,合并词典确实遵循“声明顺序”系统。如果尚未定义资源,则无法使用该资源。请将根样式置于使用该资源的样式之上。