Gibt es eine Möglichkeit, StaticResource in einer WPF-Steuerelementbibliothek zu verwenden und zur Entwurfszeit anzuzeigen?

Ich habe eine WPF-Steuerelementbibliothek, die einer Windows Forms-Anwendung hinzugefügt wird. Wir möchten, dass die Steuerelemente lokalisiert werden können. Ich bin mir jedoch nicht sicher, wie ich dies VOLLSTÄNDIG erreichen kann, ohne Code zu duplizieren.Das mache ich jetzt.

Grundsätzlich instanziiere ich in der Windows Forms-App vor dem Start der Hauptanwendung eine App.xaml, die in der Forms-App enthalten ist (mit meinen Links zu meinen Ressourcen, die auch in der Forms-App enthalten sind). Dies funktioniert perfekt zur Laufzeit.

Allerdings haben alle meine BenutzersteuerelementeContent="{StaticResource SomeVariableName}", die am Ende leer sind. Ich kann dies beheben, indem ich eine app.xaml und entsprechende Ressourcenwörterbücher in meiner Steuerelementbibliothek habe, die mit denen in meiner Windows Forms-App übereinstimmen. Dies ist jedoch duplizierter Code.

Dinge, die ich bereits erfolglos versucht habe:

Instanziieren Sie die App.xaml, die sich in der Benutzersteuerungsbibliothek befindet, in meiner Formularanwendung. Dies funktioniert nicht, da die URIs meiner Ressourcen nach einer eingebetteten Ressource suchen, nicht nach meinem lokalen Ressourcenwörterbuch (ich könnte dann die Ressourcendateien beim Erstellen einfach vom Steuerelement an einen geeigneten Speicherort in meiner Formularanwendung kopieren). Könnte ich nutzenDeferrableContent Hier? Es ist jedoch nicht viel online, was ich zu diesem Attribut finden konnte und wie es verwendet werden sollte.Ich möchte Postbuilds sowohl für App als auch für Wörterbücher verwenden. Die App-Instanziierung ist jedoch, soweit ich das beurteilen kann, ein statischer Verweis auf eine kompilierte App.xaml. App.xaml muss also mindestens in der Form lebenIch habe versucht, eine duplizierte App.xaml mit einem Postbuild zu haben, der die resourcedictionary.xaml verschiebt. Ich habe mir gedacht, dass eine duplizierte app.xaml in Ordnung ist, da dies die treibende Kraft ist und Sie sich möglicherweise sowieso nicht auf eine aus der Steuerung verlassen möchten (was kehrt zurück und Sie fragen sich, ob Sie dann die App.xaml in der Steuerung haben sollten) Es sei denn, Sie möchten einen Standard zulassen, der eingebettete Ressourcen verwendet. Der dekompilierte Code zeigt aufUri resourceLocater = new Uri("/WindowsFormsApplication3;component/app.xaml", UriKind.Relative);

Gibt es eine Möglichkeit, dies zu ermöglichen UND die Komponentenstandards in der Entwurfszeit anzuzeigen UND Doppelungen zu vermeiden? Oder ist die Vervielfältigung in diesem Fall in Ordnung? Wenn das Unterelement meines zweiten Aufzählungszeichens in Ordnung zu sein scheint (duplizierte App.xaml mit erstellten kopierten Wörterbüchern), wie kann ich dafür sorgen, dass es nicht nach einem Element auf Komponentenebene, sondern nach einem Element auf Dateiebene sucht?

Letzte Frage (und ich kann sie ggf. separat posten), auf die ich gerade geachtet habe. Meine App.xaml wird in den Code eingebaut, so dass ich sowieso keine neuen ResourceDictionaries im laufenden Betrieb erstellen kann. Gibt es eine Möglichkeit, dies zu tun?

Letzte Option ... möglicherweise die beste? - Ich habe sowieso vor, Andre van Heerwaardes Code zu verwendenSollte ich also einfach prüfen, ob eine Datei vorhanden ist, und diese sofort als zusammengeführte Ressource hinzufügen? Grundsätzlich sollte eine App.xaml in meinem Benutzersteuerelement vorhanden sein, die auf ein standardmäßig eingebettetes ResourceDictionary verweist. Und muss der Code dann im laufenden Betrieb nach den entsprechenden lokalisierten Ressourcen suchen, bei denen es sich um relative Dateipfade handeln kann? Der einzige Nachteil, den ich hier sehe, ist, dass die Standardeinstellung nicht im laufenden Betrieb geändert werden kann ... was könnte ich wahrscheinlich sogar an einem bestimmten Ort sehen (unter Verwendung einer Konvention) und habe dies der eingebauten vorgezogen?

Oh, und mein Grund dafür, dass ich keine eingebetteten Ressourcen möchte, ist, dass Endbenutzer neue lokalisierte Ressourcen hinzufügen / ändern können, nachdem der Build bereitgestellt wurde.

Ich kann Code hinzufügen, wenn es Ihnen dabei hilft, dies besser zu veranschaulichen. Lassen Sie es mich einfach wissen.

AKTUALISIEREN

Ich habe jetzt ein weiteres Problem mit dem Styling und nicht nur der Lokalisierung.

Hier ist ein Beispiel für eine der internen Schaltflächen auf einem der Steuerelemente:

<code><Button Style="{StaticResource GrayButton}"
</code>

Einige weitere Dinge, die ich ausprobiert / gedacht habe:

Ich kann mit dem ResourceDictionary keine app.xaml erstellen (die niemals verwendet werden würde), da ApplicationDefinitions in Bibliotheksprojekten nicht zulässig sind. Ich könnte dies in die Ressourcen des Steuerelements einbetten, aber dann hat dies immer Vorrang vor Ressourcen auf Anwendungsebene und ich verliere die Anpassbarkeit.

Hier ist ein Verbindungsfall das klingt tatsächlich so, wie ich es suche, bietet jedoch keine wirkliche Lösung dafür

Die Lösung (jenseits der Spitze ... was nicht funktioniert), an die ich denken kann, könnte funktionieren (und die ich noch nicht ausprobiert habe), scheint auch eine Menge Arbeit für etwas zu sein, von dem ich denke, dass es einfach sein sollte. Möglicherweise kann ich jedoch einige Abhängigkeitseigenschaften in dem Steuerelement erstellen, an das ich binden kann, und dann zulassen, dass diese durch das Projekt, das das Steuerelement verwendet, überschrieben werden. Wie gesagt, das scheint eine Menge Arbeit für eine ziemlich einfache Anfrage zu sein :). Würde das überhaupt funktionieren? Und was noch wichtiger ist, gibt es eine bessere, einfachere Lösung, die mir fehlt?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage