Kann man WPF ResourceDictionaries aus WinForms lesen? Wenn ja, wie?Read WPF ResourceDictionaries aus WinForms
1
A
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);