Load a ResourceDictionary from an assembly

你离开我真会死。 提交于 2019-12-17 09:41:27

问题


I've got an assembly somewhere on the file system, e.g. "C:\temp\test.dll". In that assembly there's a ResourceDictionary, e.g. "abc.xaml".

How can i get that ResourceDictionary? Maybe there is a way using Reflections? I didn't find a solution so far.

Thanks in advance!

Edit: Just wanted to add that I want to access the Resources in the Dictionary, e.g. a Style.


回答1:


You actually need to write the Uri like this:

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



回答2:


Edit: I found an even better solution which works with ResourceDictionaries:

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

Well, I couldn't get it to work with ResourceDictionaries, so I'm using good old Resource Files instead ;) For anyone interested, here is how I did it:

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

You can get "NameOfResource" with Reflector, as Ian suggested.




回答3:


Grab a copy of Reflector (Lutz has handed this over now). Use that to look at the assembly and the namespace etc of the resources in it.

Then read in the embedded resource something like this;

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();
    }
}


来源:https://stackoverflow.com/questions/709087/load-a-resourcedictionary-from-an-assembly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!