我有一个使用PRISM编写的WPF应用程序。我希望有一种方法可以让它轻松“重新标记”。所以我开始创建一个模块,在初始化时为应用程序添加了资源字典。这一直有效,直到我想直接在shell.xaml中设置一些组件的样式。解析xaml时,模块未初始化,因此错误。
我知道我可以使用application:///语法引用资源,但这会强制将样式dll命名为特定名称,这是我不喜欢的。
有没有人有任何其他建议?
答案 0 :(得分:0)
事实上,这个答案是等待的,但这是我正在计划的当前项目,使用MEF。它不一定是一个模块。
这是界面
[InheritedImport]
public interface IBrandProvider
{
ResourceDictionary ProvideResources();
}
实现将使用您已经提到的包URI语法加载资源字典。 shell上的实现可能如下所示;
[ImportingConstructor]
public MainWindow(IBrandProvider brand)
{
this.Resources.MergedDictionaries.Add(brand.ProvideResources());
}
确保您的IBrandProvider
位于您的容器(Unity或MEF)中,并确保在某处使用它。砰,你很高兴。正如您所料,这在XAML中是不可能的,甚至是不可取的。
为了获得额外的味道,界面可以返回一个值,说明您希望资源自动应用的级别 - 应用程序,shell或无(使用密钥以便您可以稍后选择它们)。