2010-09-30 6 views
2

Ce que je doen a été basé sur cet article: http://msdn.microsoft.com/en-us/library/aa348547.aspxSilverlight: App.Current.Resources est vide

Je suis en train d'obtenir une chaîne à partir d'un dictionnaire fusionné qui est chargé dans app.xaml. J'essaye de faire ceci d'une classe qui n'est pas un code derrière le dossier. Je sais que le fichier de ressources peut être chargé en principe parce que les éléments de page sont en style à partir du balisage xaml à partir des styles contenus dans le fichier Styles.xaml.

Le fichier app.xaml

<Application 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="theApp.App"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Assets/Styles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

le fichier Styles.xaml (sous la direction vers le bas pour la simplicité)

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" 
    xmlns:clr="clr-namespace:System;assembly=mscorlib"> 

    <clr:String x:Key="applicationName">TheKraken</clr:String> 
</ResourceDictionary> 

La ligne de code j'utilise pour essayer d'accéder à la ressource

string appName = (string)App.Current.Resources["applicationName"]; 

Aucune idée de ce que je manque?

+1

Lorsque vous démarrez l'application, essayez-vous d'accéder à la ressource? Votre utilisation réelle semble correcte. –

+0

J'essaie de l'utiliser après l'affichage des pages. Il fait partie d'un contrôle personnalisé de connexion et de mise en cache des jetons. J'ai réellement compris le problème. –

Répondre

1

Le vrai problème avec ce code n'est pas le code lui-même.

La variable à laquelle j'attribue la ressource est ensuite consommée dans le cadre d'une clause linq where.

Vous ne croirez pas cela car j'avais 3 personnes qui se grattent la tête aujourd'hui. la situation était la suivante: J'ai un ensemble d'instructions de contrat qui assurent la condition que app.Current.Resources ne soit pas vide - ces passent tous

Par souci de démontrer la bizarrerie j'attribue la ressource à 2 cordes séparées . un dont est utilisé dans la linq où la clause l'autre est là pour démontrer que tirer la chaîne de la ressource fonctionne réellement. La chaîne qui est dans la clause where est null et ne peut être définie sur autre chose que null. L'autre chaîne contient des données comme prévu. Les deux chaînes sont affectées à l'utilisation précise du même code. Même plus étrange encore, si j'initialise une chaîne pour dire "john" et que j'y affecte les données de ressources et que j'en consomme ensuite dans le linq, l'assignation de "john" à la chaîne entraîne également la chaîne nulle. le linq travaillait sur un XElement à l'époque.

string test = "John"; 
test = (string)App.Current.Resources["applicationName"]; 
var results = from ........ 
       where x == test 
       select something 

cela a causé test pour ne pas se mis à john - IE LINQ après le code remise en question est d'avoir un effet sur la cession.

La solution au problème consistait à déplacer le linq dans une autre méthode, puis tout se comportait normalement. Je n'ai pas la moindre idée de la raison pour laquelle cela s'est produit.

J'aimerais bien savoir. Suis très tenté de le recréer dans un nouveau projet et de l'envoyer à microsoft tbh. Mais j'espère qu'il y a une explication évidente et rationnelle.