通常,所有资源都放在app.xaml或其他资源xaml文件(作为资源字典)中,然后在app.xaml中引用它。
当应用棱镜模式时,对于那些模块,没有app.xaml文件。应用程序类由实现接口IModule的类替换。那么模块中控件使用的资源在哪里?
答案 0 :(得分:2)
我是这样做的:让模块在应用程序中注册资源。
答案 1 :(得分:1)
您可以在与模块相同的程序集中或在其他已加载的程序集中添加资源字典,然后使用Application.GetResourceStream
方法以编程方式访问它;但是,您需要知道定义资源的程序集的名称。
例如,如果您的程序集名为TheAssembly
且资源字典名为TheDictionary.xaml
,则可以执行(为简洁起见,未显示):
StreamResourceInfo sr = Application.GetResourceStream(
new Uri("/TheAssembly;component/TheDictionary.xaml", UriKind.Relative));
StreamReader r=new StreamReader(sr.Stream);
string xaml=r.ReadToEnd();
ResourceDictionary rd = (ResourceDictionary)XamlReader.Load(xaml);
从这里开始,您可以使用Unity容器使应用程序范围内的资源字典可用。
<强>更新强>
以下版本避免了必须对程序集名称进行硬编码,前提是该资源位于当前正在执行的程序集中:
string assemblyName = Assembly.GetExecutingAssembly().FullName.Split(',')[0];
string uri = string.Format("/{0};component/Dictionary1.xaml", assemblyName);
StreamResourceInfo sr = Application.GetResourceStream(
new Uri(uri, UriKind.Relative));
//etc...