2009-06-21 5 views
2

J'ai une application WPF qui se compose de Pages dans un NavigationWindow. Dans App.Xaml, je crée toutes mes pages pour pouvoir les référencer lors de l'utilisation des commandes de navigation. Il va un petit quelque chose comme ceci:Références de ressources circulaires à l'origine de problèmes?

<Application ...> 
<Application.Resources> 
    <FirstPage x:Key="first"/> 
    <SecondPage x:Key="second"/> 
</Application.Resources> 
</Application> 

La référence « circulaire » (ne peut pas comprendre ce que d'autre à appeler cela) se produit lorsque les références FIRSTPAGE « deuxième » ou vice versa. Disons simplement FirstPage références "deuxième" dans cet exemple.

<FirstPage ...> 
    ... 
    <Button 
    CommandParameter="{StaticResource second}" 
    </Button> 
</FirstPage> 

(Avant de commencer à répondre, je vais à l'ordre dans lequel FirstPage et secondepage sont ajoutés aux ressources de l'application dans un moment!)

Cette situation se traduit par une étrange, inutile les erreurs. Tout d'abord, dans App.xaml, je reçois l'erreur

Impossible de créer une instance de type FirstPage

Alors je roule vers FirstPage et essayer de le charger dans le concepteur. Dans le XAML, la ligne où je référence « deuxième » est mis en évidence et ce message d'erreur extrêmement utile est affiché:

L'application XAML n'a pas réussi à charger. Réparer les erreurs dans l'application XAML avant d'essayer de charger d'autres fichiers XAML

qui vient en premier, la poule ou l'oeuf? App.xaml ne peut pas charger car il ne peut pas créer FirstPage, et je ne peux pas réparer FirstPage parce que c'est en fait app.xaml c'est le problème.

choses que j'ai essayé de résoudre ce problème:
1) J'ai essayé de changer l'ordre des éléments ajoutés à Application.Resources. J'ai pensé que si FirstPage avait besoin de SecondPage, SecondPage doit être ajouté et disponible avant que FirstPage ne s'affiche. Cela ne fonctionne pas.
2) J'ai essayé d'utiliser un DynamicResource au lieu d'un StaticResource. Pas d'aide.
3) J'ai essayé d'ajouter les instances de page dans le code. Cela fonctionne, mais n'est pas satisfaisant.

Notez que l'application compile et s'exécute correctement; la question est pourquoi cela casse au moment du design.


Que puis-je faire pour résoudre ce problème? J'ai besoin d'accéder à mes pages partout pour les utiliser comme paramètres de navigation, c'est pourquoi je les mets dans les ressources de l'application. Y a-t-il un autre moyen de le faire? Je ne veux qu'une seule instance de chaque page dans mon application si je peux l'aider.

+0

Chaque fois que vous voyez ces exceptions inutiles généralement l'erreur réelle est dans la propriété Exception.InnerException – Nir

+0

Pas de doute. Le problème est que l'application fonctionne parfaitement bien, donc je ne peux pas explorer les profondeurs de l'exception pour trouver la vraie raison. – Will

+0

Je reçois le même problème. Avez-vous trouvé une bonne solution? – djskinner

Répondre

1

Vous pouvez utiliser le nom de la ressource en tant que paramètre plutôt que la ressource elle-même. Ensuite, votre commande pourrait faire la recherche de la ressource réelle pour vous.

+0

Je fais quelque chose de similaire en ce moment. J'ajoute l'instance unique dans le code plutôt que xaml et cela fonctionne comme prévu maintenant. Je suis toujours intéressé par ce qui se passe, cependant. – Will

Questions connexes