2009-10-13 7 views
1

Normalement, toutes les ressources sont placées dans des fichiers app.xaml ou d'autres ressources xaml (en tant que dictionnaire de ressources), puis référencées dans app.xaml. Lorsque vous appliquez un motif de prisme, pour ces modules, il n'y a pas de fichier app.xaml. La classe d'application est remplacée par une interface d'implémentation de classe IModule. Alors, où est le bon endroit pour les ressources utilisées par les contrôles dans le module?Où est le bon endroit pour la ressource utilisée par les contrôles dans le module lors de l'utilisation du prisme?

Répondre

1

Vous pouvez ajouter le dictionnaire de ressources dans le même assembly que le module ou dans un autre assembly chargé, puis y accéder par programmation à l'aide de la méthode Application.GetResourceStream; Cependant, vous devrez connaître le nom de l'assembly où la ressource est définie.

Par exemple, si votre assemblée est nommé TheAssembly et le dictionnaire des ressources est nommé TheDictionary.xaml, vous pouvez le faire (DISPOSE non représenté par souci de concision):

StreamResourceInfo sr = Application.GetResourceStream(
    new Uri("/TheAssembly;component/TheDictionary.xaml", UriKind.Relative)); 

StreamReader r=new StreamReader(sr.Stream); 
string xaml=r.ReadToEnd(); 

ResourceDictionary rd = (ResourceDictionary)XamlReader.Load(xaml); 

De là, vous pouvez par exemple utiliser le conteneur de l'unité pour rendre le dictionnaire de ressources disponible à l'échelle de l'application.

MISE À JOUR

La version suivante évite d'avoir à coder en dur le nom de l'ensemble, à condition que la ressource est dans l'ensemble en cours d'exécution:

string assemblyName = Assembly.GetExecutingAssembly().FullName.Split(',')[0]; 
string uri = string.Format("/{0};component/Dictionary1.xaml", assemblyName); 

StreamResourceInfo sr = Application.GetResourceStream(
    new Uri(uri, UriKind.Relative)); 

//etc... 
2

c'est comment je le fais: ont modules inscrire des ressources avec l'application.

Composite WPF (Prism) module resource data templates

+0

+1 Putain Anderson, je dois être rapide sur le tirage au sort de rivaliser avec vous sur ces questions Prism! –

+0

Je connais assez bien Prism, alors j'essaie de répondre à ces questions autant que possible. Rien d'autre n'est vraiment qu'un coup de feu dans le noir :) –

+0

@Anderson - dommage que plus d'entre nous n'utilisent pas Prism par ici ... vous seriez le jockey du prisme;) –

Questions connexes