Vermeidung von Visual Studio-designer-Fehler beim WPF-Ressource definiert, die in separaten Projekt
Wie kann ich vermeiden, dass die Visual Studio-designer-Fehler, wenn Sie eine WPF-Ressource definiert, die in separaten Projekt?
Habe ich drei Projekte in einem composite WPF-Anwendung: die Hauptanwendung, eine "Infrastruktur" Bibliothek " und ein "Modul" Bibliothek. Die Haupt-Anwendung verweist auf die anderen Projekte, die über den output-DLLs (die Projekte liegen nicht in einer einzigen Lösung zusammen).
Ich bin die Definition einer Haut (einige Pinsel und Stile in einem ResourceDictionary
) in die "Infrastruktur" - Bibliothek. Ich möchte die Haupt-Anwendung wählen Sie eine Haut, und stellen Sie es zur Verfügung, um die gesamte Anwendung (über MergedDictionaries
im App.xaml).
In meinem Modul, das ich verwenden möchte die Ressourcen definiert, die in der Haut, die die Haupt-Anwendung geladen wird. Wenn ich auf die Ressource verweisen, als ob es lokal verfügbar, wie z.B. diese:
Background={StaticResource MainBackgroundBrush}
fast alles funktioniert wie gewünscht. Die Ausnahme ist, dass die Visual Studio-designer Durcheinander kommt und sagt mir, dass "StaticResource-Referenz 'MainBackgroundBrush' wurde nicht gefunden". Diese effektiv verhindert, das ich mich mit dem designer.
Was kann ich tun, um zu definieren, eine "Haut" ResourceDictionary
in einem Projekt, Referenz, dass die Haut in der Anwendung, und verwenden Sie dann Ihre Ressourcen in einem Modul Projekt?
- Während dies nicht technisch beantworten Ihre Frage an alle, Expression Blend 2 macht keine Probleme mit der Doppel-Dereferenzierung lookup und macht Sie sich nur, finden in diesen speziellen Fällen in meiner Erfahrung.
- In VS2010 Beta 1 können Sie immer noch die designer, wenn Sie nicht finden können, eine Ressource. Es gibt Ihnen eine Warnung und dann scheint zu ignorieren das Attribut.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man erstellen Sie Ihre eigenen ResourceDictionary-Klasse erbt von ResourceDictionary.
Dann können Sie vereinbaren, dass zur design-Zeit dieser Brauch ResourceDictionary lädt einige explizit definierten Stile (D. H. diejenigen, geladen aus dem app zur Laufzeit), in der Erwägung, dass zur Laufzeit tut es gar nichts.
Die IsInDesignMode-Eigenschaft ausgewertet.
Sagen, Sie haben solch eine Klasse, genannt 'DesignTimeResourceDictionary', dann verwenden Sie einfach s.th. wie
laden Sie Ihre Ressourcen zur design-Zeit und machen Sie die designer arbeiten.
Zur Laufzeit können Sie dann Ihre DesignTimeResourceDictionary überspringen Sie die Belastung von Ressourcen und erzielen das gewünschte Verhalten.
Wenn Sie benötigen, Sie könnte wirklich eine Kopie erstellen, von der realen Ressourcen für diese, oder Sie können einfach erstellen Sie eine dummy-Wörterbuch enthält alle Schlüssel, die Sie benötigen, um die designer zu arbeiten.
Eine mögliche Lösung ist die Verwendung
DynamicResource
eher alsStaticResource
. Die Visual Studio 2008 designer zeigt einfach die Steuerelemente ohne styling, wie VS2010 beta 1 nicht, wenn es sich nicht behebenStaticResource
.Mit
DynamicResource
ist angemessen in Situationen, in denen ein bestimmter Stil kann sich zur Laufzeit ändern, wie beim Kürschner.Fand ich einige Fragen unterstützt dies:
Ich auch jemanden gefunden, der besagt, dass
DynamicResource
sollte immer verwendet werden, wenn eine Ressource nicht lokal ist:Ich möchte nur zu verlängern, Simon D. Antwort. Was er vorschlägt ist die Lösung, die ich im Augenblick verwende. Ich wollte nur zu teilen, kompletten source-code. Es ist aus diesem Trick, Um Ein ResourceDictionary Nur, Wenn Im Design-Modus Quelle.