Gut nach etwas Basteln und Nachforschung fand ich eine Lösung für meine eigene Frage. Es scheint, als ob Teile meiner Antwort im Internet verstreut wären, also werde ich versuchen, die ganze Sache auf einmal zu erklären. Um das Cap zu rekapitalisieren, wollte ich im Prinzip alle Ressourcen zentralisieren, die in Projekten innerhalb meiner Lösung verwendet werden. Dies sind die Schritte, denen ich letztendlich gefolgt bin, um dies zu erreichen.
1. Erstellen Sie ein Benutzersteuerungs-Projekt in Ihrer Lösung (jedes Projekt, das Ressourcen-Wörterbücher hosten kann). Ich werde dieses Projekt als "das Ressourcenprojekt" bezeichnen.
2. Fügen Sie alle Ressourcendateien (Bilder usw.) hinzu, die Sie zwischen Projekten für das Ressourcenprojekt freigeben möchten. Ich versuche, Dateien in Unterverzeichnissen zu organisieren, die Sinn ergeben. Sie sollten die Erstellungsaktion auf "Ressource" festlegen, damit sie in die Ausgabebinärdatei kompiliert wird.
3. Fügen Sie nun dem Ressourcenprojekt ein Ressourcenwörterbuch hinzu. In meinem Fall wollte ich mehrere Bilder referenzieren, also habe ich ein "ImageDictionary.xaml" genannt.
4. Fügen Sie Verweise auf die Bilddateien im Ressourcenwörterbuch hinzu. Ich verweise hier auf Bilder, aber es ist nur ein Ressourcenwörterbuch, in das du alles hineinlegen kannst. Die Zeichenfolge in der Mitte ist nur der relative Pfad zu der Bilddatei, auf die Sie sich beziehen.
<ImageSource x:Key="SomeImageKey">
Images/SomeImage.bmp
</ImageSource>
5. nun zu einem Projekt gehen, das die Ressource Wörterbuch erfordert, dass Sie nur in Schritt 4. Es kann eine anderen Benutzer Steuerung oder ein Fenster sein, was auch immer. Klicken Sie mit der rechten Maustaste auf Projektreferenzen und fügen Sie einen Verweis auf das Ressourcenprojekt hinzu.
6. Nun muss das aktuelle Projekt auf das in Schritt 4 erstellte Wörterbuch verweisen, das im Ressourcenprojekt definiert ist. Ich habe zuerst ein Benutzersteuerelement erstellt, so dass mein Code wie folgt aussehen würde ... Beachten Sie, dass ich gemischte Wörterbücher verwendet habe. Ich habe vor, später mehr zu verwenden, also wählte ich diesen Weg anstelle eines einzelnen Wörterbuchs. "ResourceProject" ist der Name des Projekts/der Assembly, dem Sie die Ressource hinzugefügt haben. "Komponente" ist ein Schlüsselwort, das da sein muss, gefolgt vom Pfad zur Wörterbuch-XAML-Codedatei.
Wie Sie sehen können, erfordert das Verweisen auf ein externes Ressourcenwörterbuch etwas, das als "Pack URI" bezeichnet wird. Ich fand einen kurzen Weg, es zu tun. Der lange Weg ist ein bisschen hässlicher und so weit ich weiß, hat das keinen Vorteil. Aber hier ist, wie der lange Weg aussieht.
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/ResourceProjectAssembly;component/Resources/ImageDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
7. Nun, da Ihr aktuelles Projekt einen Verweis auf das Ressourcenverzeichnis in dem Ressource-Projekt hat, kann man alles von diesem Wörterbuch verwenden. Ich ging voran und legte ein Bild in meine Benutzerkontrolle. Unten ist der Code. Es ist wie ein Wörterbuch lokal referenzieren.
<Image Source="{StaticResource SomeImageKey}" />
8. Wichtiger Hinweis! Das hat mir eine Weile Kopfschmerzen bereitet, bevor ich es gefunden habe. Stellen Sie sicher, dass das Startprojekt in Ihrer Lösung einen Verweis auf das Ressourcenprojekt hat, AUCH WENN DAS STARTUP-PROJEKT DAS RESSOURCENPROJEKT NICHT BENUTZT. (Z. B. mit der rechten Maustaste auf Verweise klicken, Verweis hinzufügen usw.) Die Ressourcen werden nur dann in die Ausgabe kompiliert, wenn Sie dies tun. Dieser Teil war knifflig, weil der Designer sogar meine Bilder zeigte und ich keine xaml-Fehler hatte, aber zur Laufzeit würde er Set-Eigenschaften werfen und Datei-Exceptions nicht finden. Dies ging weg, als ich mein Ressourcenprojekt von meinem Startprojekt referenzierte.
Hoffentlich hilft das jemand. Im Folgenden finden Sie einige Links zu einigen Stellen (einschließlich stackoverflow), die mir die benötigten Informationen zum Zusammenfügen der einzelnen Teile gaben.
http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/03/creating-and-consuming-resource-dictionaries-in-wpf-and-silverlight.aspx
Load WPF styles or other Static Resources from an external file or assembly
ResourceDictionary in a separate assembly
Excellent wenig Forschung gibt. Genau was ich brauchte +1. – Andez
Vielen Dank, ich konnte es vorher nicht funktionieren, weil ich Schritt 8 verpasst habe :(. Aber jetzt funktioniert es, brilliant :) – adminSoftDK
kann ich im Ressourcenwörterbuch hinzufügen? –
bigworld12