我有一个棱镜应用程序和各种模块。我想知道找到资源的最佳位置在哪里,例如样式,画笔,控制模板,数据模板?
我应该制作一个单一的资源字典并将所有内容放在那里吗?每个模块应该有自己的资源吗?还是每个视图?我想遵循Prism的目标,即保持一切模块化,但我也没有看到在每个模块中重新声明相同资源的重点......
答案 0 :(得分:30)
我用Prism开发应用程序,并且我使用的技术非常接近Prism手册中描述的。有YourApplication.Infrastructure项目,您通常放置所有共享接口等。所以:
使用
等内容创建文件主题\ Generic.xaml(完全使用此名称,将来会增加很多好处)<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Generic.Brushes.xaml"/>
<ResourceDictionary Source="Generic.WPF.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
现在您可以在任何模块中添加这些资源(您有单独的项目,对吧?),将YourApplication.Resources的引用添加到该项目并添加到视图的xaml中:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- Put your not shared resource here -->
</ResourceDictionary>
</UserControl.Resources>
我不知道,也许这种方式有一些问题,但它有效,对我来说效果很好。如果有人能以这种方式评论(优点/缺点) - 我会很高兴听到它!
答案 1 :(得分:5)
我通常放入ResourceDictionary
的应用范围资源,该资源已添加到App.xaml
或StartupWindow.xaml
特定View的资源通常位于View中。例如,用于CalendarView的UserControl将包含日历的任何自定义资源,例如特定于日历的画笔,样式,模板等。
我通常看不出制作模块范围资源的理由,但是如果我这样做,我会为模块提供ResourceDictionary
,可以在运行时加载到应用程序的合并字典中,或者包括在模块中的各个视图中。
答案 2 :(得分:3)
我想分享一些新的知识。我正在使用@chopikadze方法。这真的很酷。谢谢你!
但是,如果你不想每次为每个控件写这些代码:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- Put your not shared resource here -->
</ResourceDictionary>
</UserControl.Resources>
然后,你可以在<ResourceDictionary/>
的{{1}}中声明App.xaml
,就像那样:
Bootstrapper