我在 WPF 应用程序的单独 dll 中有一个 BaseSkin 和多个 UserSkins。
根据谁在使用应用程序,基本皮肤和其中一个用户皮肤将合并到资源字典中并加载以供应用程序使用。
我的目标是能够在 BaseSkin 文件中指定样式,然后在特定的 UserSkin 文件上能够覆盖它,从而更改我需要的任何属性。
我知道我可以通过使用像这样的 BasedOn 属性来实现这一点:
根据:
<Style x:Key="ButtonBg" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Green"/>
</Style>
用户:
<Style x:Key="CustomButtonBg" TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonBg}">
<Setter Property="Background" Value="Blue"/>
</Style>
问题是现在元素必须有一个 CustomButtonBg 的样式,这实际上可能没有实现。有没有办法让两种样式使用相同的键(ButtonBg),当它们合并时,应用程序首先在 User 中查找名为 ButtonBg 的样式,如果不存在,则使用 base 中的样式?
我在想,如果我可以在 BasedOn 属性中给出程序集名称以指向 BaseSkin 文件,那么当我给它们相同的键时,我可以避免命名错误,但我找不到任何方法来做到这一点。其他选项是即使没有任何更改也只强制执行每种样式,或者在皮肤中以编程方式检查,但这些是最后的手段。