Carregar um ResourceDictionary a partir de um conjunto
-
22-08-2019 - |
Pergunta
Eu tenho um lugar de montagem no sistema de arquivos, por exemplo, "C: \ temp \ teste.dll". Em que a montagem há um ResourceDictionary, v.g. "Abc.xaml".
Como posso obter que ResourceDictionary? Talvez haja uma maneira usando Reflexões? Eu não encontrar uma solução até agora.
Agradecemos antecipadamente!
Edit: Só queria acrescentar que eu quero acessar os recursos no dicionário, por exemplo, um estilo.
Solução 2
Editar: eu encontrei uma solução ainda melhor que trabalha com ResourceDictionaries:
Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri("/test;component/myresource.xaml");
Bem, eu não poderia obtê-lo para trabalhar com ResourceDictionaries, por isso estou usando o bom e velho arquivos de recursos em vez;) Para quem estiver interessado, aqui está como eu fiz isso:
Assembly a = Assembly.LoadFile(@"C:\temp\test.dll");
ResourceManager rm = new ResourceManager("NameOfResource", a);
object o = rm.GetObject("xyz");
Você pode obter "NameOfResource" com refletor, como Ian sugeriu.
Outras dicas
Você realmente precisa para escrever o Uri assim:
Assembly.LoadFrom(@"C:\temp\test.dll");
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri(@"pack://application:,,,/test;component/myresource.xaml");
pegar uma cópia do Reflector (Lutz entregou esta acabado agora). Use isso a olhar para a montagem e o namespace etc dos recursos nele.
Em seguida, leu no algo recurso incorporado como esta;
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();
}
}