Lesen Sie WPF ResourceDictionaries von WinForms
Frage
Ist es möglich, WPF ResourceDictionaries von WinForms zu lesen? Wenn ja, wie?
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);
lesen Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow