Question

Est-il possible de lire WPF ResourceDictionaries à partir de WinForms? Si oui, comment?

Était-ce utile?

La solution

Lorsque vous ajoutez des dictionnaires de ressources à un projet WPF, l'action de construction est automatiquement définie sur Page. Cela signifie que le compilateur génère un flux BAML et l'ajoute aux ressources de l'assembly.

Puisque WPF a la fonctionnalité intégrée pour lire un flux BAML mais que son API n'est pas publique, nous devons écrire une petite classe d'assistance qui accède à la méthode interne par réflexion.

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

Source: Comment lire les dictionnaires de ressources WPF à partir de WinForms

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top