ResourceDictionary dans un assembly distinct

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:

  1. Ajouter une référence du projet principal au projet “commun”
  2. Votre app.xaml devrait contenir:

        

À 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.

entrer la description de l'image ici

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 :

Structure des projets

Dictionnaire de ressources: Dictionnaire de ressources

Sortie de code:

Sortie

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.