Le chargement d'une ressource avec Findresource throws exception - WPF/C#
Je suis en train d'écrire un CustomControl en WPF. J'ai quelques DataTemplates dans mes Thèmes/Generic.xaml, à la resourcedictionary niveau, avec x:Clé attribuée pour eux.
Maintenant à partir de l'intérieur de la même classe de contrôle de code, je veux trouver et charger la ressource afin que je puisse dynamiquement assing à quelque chose dans le code.
J'ai essayé de base/ce.FindResource("keyvalue"), ce.Ressources [""], etc.
Il revient toujours, que la ressource n'est pas trouvée et donc nulle.
La ressource est defenitely il y a dans le générique.xaml.
S'il vous plaît aider.
OriginalL'auteur user61862 | 2009-02-03
Vous devez vous connecter pour publier un commentaire.
Un peu tard pour une réponse, mais il pourrait bénéficier les autres.
La ressource que vous essayez d'accéder est au thème, pour y accéder à partir de n'importe où dans votre assemblée, il doit être identifié par ComponentResourceKey:
puis dans votre XAML, vous auriez référence comme ceci:
et dans votre code comme ceci:
Il y a aussi une verbose la forme de la syntaxe XAML qui ressemble à ceci (mais c'est juste la même chose):
Noter que même si l'TypeInTargetAssembly doit être établie, elle ne restreint pas l'accès à cette ressource pour d'autres types de montage.
+1 - grande réponse
OriginalL'auteur Alex_P
Assurez-vous que vous avez bien ajouté le contrôle personnalisé comme un enfant à un autre contrôle avant d'utiliser le FindResource sur elle. Je suis sûr que lorsque vous utilisez FindResource, il monte le contrôle de la hiérarchie jusqu'à ce qu'il trouve une correspondance. Si votre commande n'a aucun parent, il ne trouve pas la ressource que vous recherchez.
OriginalL'auteur timothymcgrath
Vous pouvez charger le dictionnaire de ressources comme ceci:
Vous pouvez ensuite trouver des ressources de la manière habituelle, par exemple, mondictionnaire["keyvalue"]
OriginalL'auteur Ed Bayiates
Puisque vous êtes la construction d'un contrôle personnalisé je présume que vous avez un ControlTemplate défini dans votre générique.fichier xaml? Si oui, alors si vous ajoutez votre DataTemplate(s) à la section des Ressources de la ControlTemplate comme ceci:
puis à la condition que le modèle de contrôle a été appliquée/chargé ensuite, vous serez en mesure de trouver des modèles de données à l'aide d'un appel à cette fonction.FindResource() à l'intérieur de votre contrôle.
OriginalL'auteur Richard McGuire
x:Clé et le Type de données sont mutualy exclusiv. En interne, si vous définissez le Type de données, WPF génère une clé de type DataTemplateKey. Ainsi, un appel de FindResource avec ComponentResourceKey déclenche une exception, parce que la ressource ne peut pas être trouvé avec cette clé. Utilisation
pour un DataTemplate avec DataType={x:Type de local:yourType} définie ou
pour un DataTemplate avec x:Key={ComponentResourceKey TypeInAssembly={x:Type l:yourType}, Id_ressource=ressId} définie. Ne pas définir le Type de données et x:Key dans le même modèle.
OriginalL'auteur Paul
Je ne suis pas sûr, je pense que vous avez besoin de définir dans la de le code XAML de votre utilisation ou de l'une ressource statique avec un nouveau x:Clé corrisponds à ce que vous voulez changer.
est une autre option si vous utilisez un fichier qui contient le modèle de fusionner les ressources comme ceci:
à l'endroit approprié vous allez essayer et trouver la ressource
HTH,
Eric
OriginalL'auteur user61477
Thnaks à la fois.
J'ai essayé de déplacer les ressources en CT de la section des ressources. Même alors, quand je lève les yeux au moment de l'exécution, dire dans OnApplyTemplate ou EndInit (), etc., la ce.Des ressources n'a pas d'objets 🙁 bien que son tout ther ein le contrôle du Générique.xaml.
Elle retourne null en tout temps.
OriginalL'auteur user61862