2010-05-26 7 views
10

J'ai une application WPF dans laquelle je voudrais utiliser des ressources statiques. J'ai créé un fichier XAML de bibliothèque de ressources qui contient une ressource. J'ai également ajouté une chaîne dans les ressources du projet à travers le panneau Propriétés.Comment utiliser les ressources globales dans WPF?

Je suppose que je pouvais utiliser ces ressources avec l'expression de liaison:

{StaticResource ResourceName} 

Mais visual studio me dit les ressources ne sont pas trouvés. Dois-je inclure une forme de référence dans mon code XAML? Les exemples que j'ai vu ne comprennent que les ressources locales telles que:

<Window.Resources>, <Page.Resources> etc 

Je ne veux pas inclure les ressources au niveau local parce que je veux qu'ils soient disponibles à plusieurs parties de l'application.

Répondre

9

Les mettre dans le App.xaml :)

Dans chaque application WPF il y a une App.xaml (et son fichier de code correspondant , App.xaml.cs ou App.xaml.vb) qui fonctionne comme un fichier global pour les déclarations à l'échelle de l'application . Vous pouvez utiliser ce fichier pour déclarer une constante dans votre application. Par exemple, vous pouvez déclarer un arrière-plan rouge par défaut pour tous les boutons d'une application .

http://www.microsoft.com/emea/msdn/thepanel/en/articles/introduction_wpf.aspx

+0

Dans mon projet, cela s'appelait par défaut Application.xaml. C'est une bonne réponse, mais est-ce que je ne peux pas rendre les styles de ma ResourceLibrary disponibles globalement? – Banford

+0

lien ne fonctionne pas – tabby

2

Regardez la section sur "le comportement de recherche de ressource statique" here. Tout ce qui se trouve dans le dictionnaire de ressources de l'application (c'est-à-dire Application.Resources) est disponible dans le monde entier. Chaque fois que vous recherchez une ressource avec une clé donnée et que la clé n'est utilisée nulle part dans la hiérarchie des dictionnaires de ressources locales, celle du dictionnaire de l'application sera renvoyée. Pour remplir le dictionnaire de ressources de l'application en XAML, recherchez le fichier XAML de l'application (généralement App.xaml) et ajoutez un élément Application.Resources.

+0

Je peux comprendre comment le comportement de recherche fonctionne jusqu'à cette zone Application.Resources, mais comment utiliser une ressource qui est définie sur le projet. Par exemple. Cliquez avec le bouton droit sur le fichier de projet, cliquez sur Propriétés, puis sur Ressources. Je veux dire les ressources là-dedans. Les ne sont pas inclus dans mon Application.Resources et aucun n'est mon fichier xaml de bibliothèque de ressources. – Banford

+0

Je l'ai utilisé .. < ResourceDictionary Source = "Actif/Ressources/Styles.xaml" /> Et qui a résolu l'un des problèmes en permettant moi d'utiliser les styles dans mon dictionnaire de ressources externe. Toujours en difficulté sur la ressource du projet réel cependant. – Banford

+0

Désolé, je n'ai pas remarqué que vous essayiez d'utiliser les ressources du projet. Les ressources du projet et les dictionnaires de ressources sont vraiment deux choses différentes. Si vous avez (par exemple) une image qui est une ressource de projet, vous pouvez l'obtenir dans le dictionnaire de ressources via ''. Mais toutes les classes WPF n'ont pas de propriété 'Source' qui peut les charger à partir des ressources du projet. –

0

Juste pour ajouter mes 2 cents ici. Je voulais également utiliser des ressources globales, mais j'utilise une classe Application personnalisée, donc je ne pouvais pas simplement le mettre dans App.xaml.

J'ai créé un Resources.xaml dans mon emplacement racine, puis a fait ceci:

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/MyWpfClient;component/Resources.xaml", UriKind.Relative) }); 

Mais attention, le Resource.xaml DOIT avoir l'Action de génération page. Quand ce n'était pas le cas, il ne pouvait pas trouver certains types de convertisseurs.

2

Vous pouvez créer un dictionnaire des ressources globales et inclure son chemin dans app.xaml

<Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="/YourProject;Component/YourXamlFile.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 

Maintenant toutes vos ressources dans le YourXamlFile.xaml seront visibles à l'échelle mondiale dans votre projet.

Questions connexes