我有一个WPF应用程序,使用Prism,我们正在使用一些模块(以及更多的全局,许多微服务)。
我正在寻找为应用程序提供可用于表示模型的模板的最佳实践。
因为我要从模块中执行此操作,所以我不能只创建一个ResourcesDictionary并将其添加到App资源。
你会怎么做?我们的目标是很好地隔离功能。
答案 0 :(得分:1)
我认为你还没有完全解释你的目的或你在这里有什么。考虑到这个附带条件。
如果您在应用中创建了常规资源字典,则可以将其合并到app.xaml中。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
然后,您可以使用x:Key或隐式样式在标记中定位资源。以及针对数据类型的模板。
这样做是将资源字典中的内容添加到某种字典中。 (它不完全是字典)它具有关键和价值 这有你整个申请的范围 你可以参考那里的东西并将它们切换出来。您可以在代码中合并另一个资源字典。一旦他们在那里,他们就会留下来,直到你关闭应用程序或清除这些资源。
您可以阅读资源字典:
ResourceDictionary rd = new ResourceDictionary
{
Source = new Uri("Dictionary1.xaml", UriKind.Relative)
};
合并它:
Application.Current.Resources.MergedDictionaries.Add(rd);
如果在标记中合并资源字典,则甚至不必编译它。我从来没有在代码中尝试过,但我猜你可能会发现你可以合并一个“松散的”未编译的资源字典。如果它没有直接工作你绝对可以xamlreader.Load或.Parse一个未编译的rd到内存中的一个。
这增加了应用范围。如果你想要,那么也许你应该在app.xaml中合并你的资源词典 如果你想要范围,那么windows,usercontrols等都有资源。您可以在几乎任何您想要的级别合并资源字典,然后它的范围将比应用程序更窄。