从程序集加载ResourceDictionary

时间:2009-04-02 09:58:02

标签: c# wpf xaml resourcedictionary

我在文件系统的某个地方有一个程序集,例如“C:\ TEMP \ Test.dll的”。 在那个程序集中有一个ResourceDictionary,例如“abc.xaml”。

我如何获得ResourceDictionary?也许有一种方法使用Reflections?到目前为止我没有找到解决方案。

提前致谢!

编辑:只是想添加我想要访问字典中的资源,例如风格。

3 个答案:

答案 0 :(得分:21)

你实际上需要像这样编写Uri:

Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"pack://application:,,,/test;component/myresource.xaml");

答案 1 :(得分:10)

编辑:我找到了一个更好的解决方案,适用于ResourceDictionaries:

Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri("/test;component/myresource.xaml");

好吧,我无法使用ResourceDictionaries,因此我使用了旧的资源文件;) 对于任何有兴趣的人,我都是这样做的:

Assembly a = Assembly.LoadFile(@"C:\temp\test.dll");
ResourceManager rm = new ResourceManager("NameOfResource", a);
object o = rm.GetObject("xyz");

你可以使用Reflector获得“NameOfResource”,正如Ian建议的那样。

答案 2 :(得分:2)

抓住Reflector的副本(Lutz现已交出来)。用它来查看其中资源的程序集和命名空间等。

然后在嵌入式资源中读取这样的内容;

Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
using (System.IO.Stream s = asm.GetManifestResourceStream(<yourname>)
{
    using (System.IO.StreamReader reader = new System.IO.StreamReader(s))
    {
        string xml = reader.ReadToEnd();
    }
}