J'ai un projet contenant un xaml ResourceDictionary que je souhaite utiliser en dehors d'un FrameworkElement. Le dictionnaire de ressources contiendra un DataTemplate pour une classe locale au projet afin d'éviter de polluer le fichier app.xaml (car le projet est un module prisme, et ne sera pas toujours présent en fonction de la configuration). Donc, j'ai un fichier test.xaml avec une action de construction de ressources.Création de WPF ResourceDictionary à partir du code ne semble pas fonctionner lors de la définition de ResourceDictionary.Source
Ceci est destiné à fournir DataTemplate pour une classe TestObject.
Dans la classe TestObject J'ai une méthode getTemplate()
Les travaux suivants:
DataTemplate GetTemplate()
{
Uri uri = new Uri("MyProject;component/test.xaml", UriKind.Relative);
var dict = new ResourceDictionary { Source = uri};
return (DataTemplate)dict["TestObjectDataTemplate"];
}
Ce renvoi d'une exception quand je cède la uri à la propriété ResourceDictionary.Source
DataTemplate GetTemplate()
{
Uri uri = new Uri("/test.xaml", UriKind.Relative);
var dict = new ResourceDictionary { Source = uri};
return (DataTemplate)dict["TestObjectDataTemplate"];
}
Le second exemple échoue car /test.xaml est introuvable dans l'assembly local. Pourquoi aurais-je besoin d'y accéder avec "ReferencedAssembly; component/test.xaml"?
Dans ce cas, l'assemblage local signifie-t-il l'ensemble d'exécution ou l'ensemble dont le code/la ressource fait partie?
Modifier: Mis à jour pour refléter le problème actuel.
J'ai modifié la question pour décrire le problème plus précisément. Un uri relatif fonctionne bien, le problème est que je dois me référer au nom de l'assemblée, malgré les doc msdn qui impliquent qu'un "assembly local" ne devrait pas avoir besoin de cela. – LukeN
@LukeN J'ai mis à jour ma réponse pour votre édition. :) –
C'est ça. Le problème est que http://msdn.microsoft.com/en-us/library/aa970069.aspx dit assembly local et ne pas exécuter l'assembly. J'ai depuis découvert que quelqu'un d'autre l'a trouvé aussi trompeur - http://geekswithblogs.net/NewThingsILearned/archive/2008/04/30/pack-uri-authority---local-assembly--executable.aspx alors que dans Dans votre exemple, je m'attendais à ce que si j'essayais de charger une référence Project A dans le code du projet A, je n'aurais pas besoin de spécifier le nom. À la réflexion, je comprends pourquoi vous pourriez vouloir ce comportement, mais il a été mal décrit. – LukeN