Frage

Ich habe eine Reihe von Stilen und Bürsten in einem Resource definiert, dass ich bin Laden als MergedDictionary in XAML meiner Top-Level-Steuerung:

<ResourceDictionary.MergedDictionaries>
     <ResourceDictionary Source="/MyAssembly;component/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>

Ich versuche, optional ersetzen einige dieser Stile & Bürsten, wenn eine andere XAML-Datei im XAP mit seinem eigenen Resource existiert. Ich versuche, in diesem Wörterbuch zur Laufzeit vor InitializeComponent () fusionieren auf meiner Benutzersteuerung genannt. Ich verwende den folgenden Code, um zu versuchen, dies zu tun:

public static class StyleLoader
{
    public static void MergeStyle(string xamlUri)
    {
        try
        {
            XDocument xaml = XDocument.Load(xamlUri);
            ResourceDictionary rd = XamlReader.Load(xaml.ToString()) as ResourceDictionary;
            Application.Current.Resources.MergedDictionaries.Add(rd);

        }
        catch (XmlException ex)
        {
            // if the file doesn't exist, we can't add it
        }
    }
}

Das Ressourcenverzeichnis der optionalen Datei geladen werden fein und verschmolzen, aber mein ursprünglicher Satz von Arten immer diese zu überschreiben scheint. Wenn ich das fusionierte Wörterbuch in XAML kommentieren und sie einfach, um zur Laufzeit laden es funktioniert perfekt:

    StyleLoader.MergeStyle("/MyAssembly;component/Styles.xaml");
    StyleLoader.MergeStyle("BrushReplacements.xaml");

    InitializeComponent();

Mein Problem bei dieser Lösung ist, dass ohne die Standard-Stile in XAML, ich nicht das Projekt in Mischung öffnen kann. Wer noch keine Ideen für eine Lösung, die meine Standard-Stile bekannt halten mischen, aber lassen Sie mich optional sie mit einem dynamisch geladenen Ressourcenverzeichnis zur Laufzeit außer Kraft zu setzen? Dank!

War es hilfreich?

Lösung

Hier ist eine Lösung, bei der Farben / Bürsten mit Bindungen angewendet werden stattdessen direkt auf die statischen Ressourcen verweisen:
http://blogs.msdn.com/corrinab/archive/ 2009/11 / 24 / 9927729.aspx
Zweiter Teil:
http://blogs.msdn.com/corrinab/archive/ 2009/12 / 02 / 9931283.aspx

Zur Zeit denke ich, so etwas wie dies ist der beste Weg, mit dynamisch Schalen Themen zur Laufzeit zu tun. Aber es hat eine Menge Arbeit zu Port erfordern eine bestehende Anwendung einen Mechanismus, wie diese zu verwenden.

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