Pregunta

¿Es posible leer los diccionarios de recursos de WPF de WinForms? En caso afirmativo, ¿cómo?

¿Fue útil?

Solución

Cuando agrega diccionarios de recursos a un proyecto WPF, la acción de compilación se establece automáticamente en Página. Esto significa que el compilador genera una secuencia BAML y la agrega a los recursos del ensamblado.

Dado que WPF tiene la funcionalidad incorporada para leer una secuencia BAML pero su API no es pública, tenemos que escribir una pequeña clase auxiliar que acceda al método interno a través de la reflexión.

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

Fuente: Cómo leer los diccionarios de recursos WPF de WinForms

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top