Pergunta

É possível ler ResourceDictionaries WPF de WinForms? Se sim, como?

Foi útil?

Solução

Quando você adiciona dicionários recursos para um projeto WPF a ação de compilação é definida automaticamente à página. Isto significa que o compilador gera um fluxo BAML e adiciona-lo para os recursos da montagem.

Desde WPF tem a funcionalidade interna para ler um fluxo BAML mas sua API não é público, temos que escrever uma pequena classe auxiliar que o acesso o método interno sobre reflexão.

public static class BamlReader
{
    public static object Load(Stream stream)
    {
        ParserContext pc = new ParserContext();
        MethodInfo loadBamlMethod = typeof(XamlReader).GetMethod("LoadBaml", 
            BindingFlags.NonPublic | BindingFlags.Static)
        return loadBamlMethod.Invoke(null, new object[] { stream, pc, null, false });
    }
}

// Usage:
StreamResourceInfo sri = System.Windows.Application.GetResourceStream(
    new Uri("/MyAssemblyName;component/MyResourceDict.xaml", UriKind.Relative));
    ResourceDictionary resources = (ResourceDictionary)BamlReader.Load(sri.Stream);

Fonte: Como ler ResourceDictionaries WPF de WinForms

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top