Resource in einem separaten Montage
-
19-08-2019 - |
Frage
Ich habe Ressourcenwörterbuchdateien (MenuTemplate.xaml, ButtonTemplate.xaml, usw.), die ich in mehreren separaten Anwendungen verwenden möchten. Ich kann sie auf die Baugruppen Anwendungen hinzufügen, aber es ist besser, wenn ich diese Ressourcen in einer einzigen Baugruppe zusammenstellen und meine Anwendungen auf sie verweisen, nicht wahr?
Nachdem die Ressourcenanordnung aufgebaut ist, wie kann ich darauf verweisen in der App.xaml meiner Anwendungen? Derzeit verwende ich ResourceDictionary.MergedDictionaries die einzelnen Wörterbuchdateien zu verschmelzen. Wenn ich sie in einer Baugruppe, wie kann ich auf sie verweisen in XAML?
Lösung
Überprüfen Sie die URI-Syntax packen. Sie wollen etwas wie folgt aus:
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>
Andere Tipps
Ein Beispiel, nur um diese eine 15 Sekunden Antwort -
Sagen Sie „Styles.xaml“ in einer WPF-Bibliothek mit dem Namen „common“ und Sie wollen, es benutzen von Ihrem Hauptanwendungsprojekt:
- Fügen Sie einen Verweis aus dem Hauptprojekt „gemeinsames“ Projekt
- Ihre app.xaml sollte enthalten:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Prost
Ich arbeite mit 4,5 .NET und nicht diese Arbeit bekommen konnte ... Ich war mit WPF Custom Control-Bibliothek. Dieser arbeitete für mich am Ende ...
<ResourceDictionary Source="/MyAssembly;component/mytheme.xaml" />
Quelle: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/11a42336-8d87-4656-91a3-275413d3cc19
Resource-Only-DLL ist eine Option für Sie. Aber es ist nicht unbedingt erforderlich, wenn Sie Ressourcen ändern, ohne neu zu kompilieren Anwendungen wollen. Haben nur eine gemeinsame Resource Datei auch eine Option. Es hängt davon ab, wie oft Sie Ressourcen ändern und etc.
<ResourceDictionary Source="pack://application:,,,/
<MyAssembly>;component/<FolderStructureInAssembly>/<ResourceFile.xaml>"/>
MyAssembly - Just Montage ohne Erweiterung benennen
FolderStructureInAssembly - Wenn Sie Ihre Ressourcen in einer folde sind, Ordnerstruktur angeben
Wenn Sie dies tun, ist es besser zu wissen, siteOfOrigin als auch.
WPF unterstützt zwei Behörden: Anwendung: /// und siteoforigin: ///. Die Anwendung: /// Behörde Anwendungsdatendateien identifiziert, bei der Kompilierung, einschließlich Ressourcen- und Inhaltsdateien sind bekannt. Das siteoforigin: /// Behörde einen Standort Ursprungsdateien. Der Geltungsbereich jede Behörde ist in der folgenden Abbildung.
gezeigt
Für UWP:
<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />
Verwenden von XAML:
Wenn Sie wissen, die andere assembly
Struktur und wollen die resources
in c # Code, dann unter Code verwenden:
ResourceDictionary dictionary = new ResourceDictionary();
dictionary.Source = new Uri("pack://application:,,,/WpfControlLibrary1;Component/RD1.xaml", UriKind.Absolute);
foreach (var item in dictionary.Values)
{
//operations
}
Ausgabe:. Wenn wir wollen, ResourceDictionary
RD1.xaml
Projekt WpfControlLibrary1
in StackOverflowApp
Projekt verwenden
Struktur von Projekten :
Code-Ausgabe:
PS:. Alle ResourceDictionary
Dateien sollten Build Action
als 'Resource
' oder 'Page
' haben
Verwenden von C #:
Wenn jemand will, um die Lösung in rein c # -Code dann sieht meine diese Lösung.