J’ai des fichiers de dictionnaire de ressources (MenuTemplate.xaml, ButtonTemplate.xaml, etc.) que je veux utiliser dans plusieurs applications distinctes. Je pourrais les append aux assemblys des applications, mais il vaut mieux que je comstack ces ressources dans un seul assemblage et que mes applications le référencent, non?
Une fois l’assembly de ressource créé, comment puis-je le référencer dans App.xaml de mes applications? Actuellement, j’utilise ResourceDictionary.MergedDictionaries pour fusionner les fichiers de dictionnaire individuels. Si je les ai dans un assemblage, comment puis-je les référencer dans xaml?
Découvrez la syntaxe URI du pack . Vous voulez quelque chose comme ça:
Un exemple, juste pour faire une réponse de 15 secondes –
Supposons que vous avez “styles.xaml” dans une bibliothèque WPF nommée “common” et que vous souhaitez l’utiliser depuis votre projet d’application principal:
À votre santé
Je travaille avec .NET 4.5 et je ne pouvais pas le faire fonctionner … J’utilisais la bibliothèque de contrôle personnalisée WPF. Cela a fonctionné pour moi à la fin …
source: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/11a42336-8d87-4656-91a3-275413d3cc19
La DLL de ressource seule est une option pour vous. Mais cela n’est pas nécessairement nécessaire à moins que vous souhaitiez modifier des ressources sans recomstackr des applications. Un seul fichier ResourceDictionary commun est également une option. Cela dépend de la fréquence à laquelle vous changez de ressources, etc.
MyAssembly – Juste nom d’assemblage sans extension
FolderStructureInAssembly – Si vos ressources sont dans un pli, spécifiez la structure du dossier
Lorsque vous faites cela, il est préférable de prendre également en compte siteOfOrigin .
WPF prend en charge deux autorités: application: /// et siteoforigin: ///. L’autorité application: /// identifie les fichiers de données d’application connus au moment de la compilation, y compris les fichiers de ressources et de contenu. L’autorité siteoforigin: /// identifie les fichiers du site d’origine. La scope de chaque autorité est indiquée dans la figure suivante.
Pour UWP:
En utilisant XAML:
Si vous connaissez l’autre structure d’ assembly
et que vous voulez les resources
dans le code c # , utilisez le code ci-dessous:
ResourceDictionary dictionary = new ResourceDictionary(); dictionary.Source = new Uri("pack://application:,,,/WpfControlLibrary1;Component/RD1.xaml", UriKind.Absolute); foreach (var item in dictionary.Values) { //operations }
Sortie: Si vous souhaitez utiliser ResourceDictionary
RD1.xaml
de Project WpfControlLibrary1
dans le projet StackOverflowApp
.
Structure des projets :
Dictionnaire de ressources:
Sortie de code:
PS: tous les fichiers ResourceDictionary
doivent avoir une Build Action
tant que « Resource
» ou « Page
».
En utilisant C #:
Si quelqu’un veut la solution en code purement c #, alors voyez ma solution.