2013-04-29 75 views
2

我有一个使用PRISM编写的WPF应用程序。我想要一种方法来让它“轻松地”重新标记。所以我开始创建一个模块,在初始化时将资源字典添加到应用程序中。直到我想直接在shell.xaml中对某些组件进行样式化,这一直奏效。当xaml被解析时,模块没有被初始化,所以它是错误的。WPF通过PRISM加载资源

我知道我可以使用该应用程序引用的资源:///语法,但随后迫使造型DLL被命名为一个特定的名称,我不喜欢的。

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

回答

0

这个答案是事后waaaay但它是什么我打算为我的当前项目,使用MEF。它不一定是一个模块。

这是接口

[InheritedImport] 
public interface IBrandProvider 
{ 
    ResourceDictionary ProvideResources(); 
} 

实现会使用你已经提到包URI语法加载资源字典。你的shell的实现可能看起来像这样;

[ImportingConstructor] 
public MainWindow(IBrandProvider brand) 
{ 
    this.Resources.MergedDictionaries.Add(brand.ProvideResources()); 
} 

确保您的IBrandProvider在你的容器(统一或MEF),并确保你使用它的地方。 BOOM,你很好走。正如您所预料的那样,这在XAML中是不可能的,甚至是不可取的。

对于额外的味道,界面可以返回一个值,说明你要什么级别自动应用的资源 - 应用程序,外壳或无(带钥匙,所以你可以挑樱桃日后也许)。