Frage

Ist es möglich, WPF ResourceDictionaries von WinForms zu lesen? Wenn ja, wie?

War es hilfreich?

Lösung

Wenn Sie Ressourcen Wörterbücher zu einem WPF-Projekt der Build-Aktion hinzufügen wird automatisch auf Seite gesetzt. Dies bedeutet, dass der Compiler einen BAML Strom erzeugt und fügt sie zu den Ressourcen der Versammlung.

Da WPF die integrierte Funktionalität hat einen BAML Stream zu lesen, aber seine API ist nicht öffentlich, müssen wir eine kleine Helfer Klasse schreiben, die die interne Methode über Reflektion zugreifen zu können.

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

Quelle: Wie WPF ResourceDictionaries von WinForms

lesen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top