2009-05-02 5 views

Antwort

1

Wenn Sie einem WPF-Projekt Ressourcenwörterbücher hinzufügen, wird die Buildaktion automatisch auf Seite festgelegt. Dies bedeutet, dass der Compiler einen BAML-Stream generiert und den Ressourcen der Assembly hinzufügt.

Da WPF über die integrierte Funktionalität zum Lesen eines BAML-Streams verfügt, dessen API jedoch nicht öffentlich ist, müssen wir eine kleine Hilfsklasse schreiben, die über Reflektion auf die interne Methode zugreift.

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: How to read WPF ResourceDictionaries from WinForms