WPF通过PRISM加载资源

时间:2013-04-29 11:38:20

标签: wpf prism

我有一个使用PRISM编写的WPF应用程序。我希望有一种方法可以让它轻松“重新标记”。所以我开始创建一个模块,在初始化时为应用程序添加了资源字典。这一直有效,直到我想直接在shell.xaml中设置一些组件的样式。解析xaml时,模块未初始化,因此错误。

我知道我可以使用application:///语法引用资源,但这会强制将样式dll命名为特定名称,这是我不喜欢的。

有没有人有任何其他建议?

1 个答案:

答案 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或无(使用密钥以便您可以稍后选择它们)。