使用 prism 时,模块中的控件使用的资源的正确位置在哪里?
通常,所有资源都放在app.xaml中,或者其他资源xaml文件(作为资源字典),然后在app.xaml中引用它。
当应用棱镜模式时,对于这些模块,没有app.xaml文件。应用程序类被替换为实现接口 IModule 的类。那么模块中控件使用的资源的正确位置在哪里呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我就是这样做的:让模块向应用程序注册资源。
复合 WPF (Prism) 模块资源数据模板
this is how i do it: have modules register resources with the app.
Composite WPF (Prism) module resource data templates
您可以将资源字典添加到与模块相同的程序集中或其他加载的程序集中,然后使用
Application.GetResourceStream
方法以编程方式访问它;但是,您需要知道定义资源的程序集的名称。例如,如果您的程序集名为
TheAssembly
并且资源字典名为TheDictionary.xaml
,您可以执行以下操作(为简洁起见,未显示 Disposes):从这里,您可以示例使用 Unity 容器使资源字典在应用程序范围内可用。
更新
以下版本避免了必须对程序集名称进行硬编码,前提是资源位于当前正在执行的程序集中:
You can add the resource dictionary in the same assembly as the module or in other loaded assembly, then access it programmatically by using the
Application.GetResourceStream
method; however you will need to know the name of the assembly where the resource is defined.For example, if your assembly is named
TheAssembly
and the resource dictionary is namedTheDictionary.xaml
, you can do (Disposes not shown for brevity):From here, you can for example use the Unity container to make the resource dictionary available application-wide.
UPDATE
The following version avoids having to hard-code the assembly name, provided that the resource is in the currently executing assembly: