233 votes

ResourceDictionary dans un ensemble distinct

J'ai de la ressource fichiers de dictionnaire (MenuTemplate.xaml, ButtonTemplate.xaml, etc) que je veux utiliser dans plusieurs applications distinctes. Je pourrais ajouter pour les applications d'assemblées, mais c'est mieux si je compile ces ressources dans une seule assemblée et d'avoir mes applications de référence, à droite?

Une fois la ressource de ensemble construit, comment puis-je y faire référence dans l'Application.xaml de mes applications? Actuellement, je utiliser ResourceDictionary.MergedDictionaries à la fusion de l'individu fichiers de dictionnaire. Si je les ai dans une assemblée, comment puis-je faire référence dans le code xaml?

340voto

Kent Boogaart Points 97432

Découvrez le pack syntaxe d'URI. Vous voulez quelque chose comme ceci:

<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>

92voto

Hertzel Guinness Points 2983

Un exemple, juste pour faire de ce à 15 secondes répondre

Dites que vous avez "les styles.xaml" dans un WPF bibliothèque nommée "commun" et que vous souhaitez utiliser à partir de votre application principale du projet:

  1. Ajouter une référence à partir de l'objectif principal du projet "commun" projet
  2. Votre application.xaml doit contenir:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Cheers

34voto

Aleksandar Toplek Points 874

Je suis travailler avec .NET 4.5 et ne pouvais pas obtenir ce travail... j'ai été en utilisant WPF Bibliothèque de contrôles Personnalisés. Cela a fonctionné pour moi en fin de compte...

<ResourceDictionary Source="/MyAssembly;component/mytheme.xaml" />

source: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/11a42336-8d87-4656-91a3-275413d3cc19

16voto

CharithJ Points 15364

DLL de ressource Uniquement est une option pour vous. Mais il n'est pas nécessairement requis, sauf si vous souhaitez modifier ces ressources sans avoir à recompiler les applications. Avoir juste une commune ResourceDictionary fichier est également une option. Ça dépend combien de fois vous changez de ressources et etc.

<ResourceDictionary Source="pack://application:,,,/
     <MyAssembly>;component/<FolderStructureInAssembly>/<ResourceFile.xaml>"/>

MyAssembly - Juste de l'assemblée le nom sans l'extension

FolderStructureInAssembly - Si vos ressources sont dans un folde, indiquez le dossier de la structure

Lorsque vous faites cela, il est préférable de conscience de siteOfOrigin .

WPF prend en charge deux autorités: application:/// et siteoforigin:///. L'application:/// autorité identifie les fichiers de données d'application sont connus au moment de la compilation, y compris les ressources et le contenu des fichiers. L' siteoforigin:/// autorité identifie site d'origine des fichiers. Le champ d'application de chaque autorité est illustré dans la figure suivante.

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: