我有一个BaseSkin和多个UserSkins,它们存储在我的WPF应用程序的一个独立dll中。
根据使用应用程序的人员不同,基础皮肤和其中一个用户皮肤将合并到资源字典中,并加载供应用程序使用。
我想要的是能够在BaseSkin文件中指定样式,然后在特定的UserSkin文件中覆盖它,改变任何需要的属性。
我知道可以通过像这样使用BasedOn属性来实现这一点:
问题在于现在元素必须具有CustomButtonBg样式,但实际上可能没有实现。有没有办法让这两种样式使用相同的键(ButtonBg),并且在它们合并时,应用程序首先查找名为User中的ButtonBg样式,如果不存在,则使用base中的样式?
我想,如果我可以在BasedOn属性中给出BaseSkin文件的程序集名称,我就可以避免命名错误,当我给它们相同的键时,但我找不到任何方法来做到这一点。其他选项是强制实现每个样式,即使没有任何更改,或者在皮肤中进行程序检查,但这些都是最后的手段。
根据使用应用程序的人员不同,基础皮肤和其中一个用户皮肤将合并到资源字典中,并加载供应用程序使用。
我想要的是能够在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文件的程序集名称,我就可以避免命名错误,当我给它们相同的键时,但我找不到任何方法来做到这一点。其他选项是强制实现每个样式,即使没有任何更改,或者在皮肤中进行程序检查,但这些都是最后的手段。