2

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

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

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

4

1 回答 1

0

这个答案是事实之后的 waaaay,但这是我正在为我当前的项目计划的,使用 MEF。它不必是一个模块。

这是界面

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

实现将使用您已经提到的 pack URI 语法加载资源字典。您的 shell 上的实现可能如下所示;

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

确保您IBrandProvider在您的容器(Unity 或 MEF)中,并确保您在某处使用它。BOOM,你可以走了。正如您所料,这在 XAML 中是不可能的,甚至是不可取的。

为了增加风味,界面可以返回一个值,说明您希望自动应用资源的级别 - 应用程序、shell 或无(使用密钥,以便您稍后可以挑选它们)。

于 2013-08-08T08:42:32.813 回答