J'ai besoin d'instancier des types WPF (par exemple, un UserControl ou une Page) via la réflexion pour un concepteur. Le problème que j'ai est que quand j'essaye d'instancier ceux-ci using Activator.CreateInstance j'obtiens un TargetInvocationException qui encapsule, à la fin, une exception levée par l'extension de balisage StaticResource.Comment est-ce que je peux instancier des éléments de WPF par leur type quand ils ont StaticResources?
Clarification: Les types sont dans un ensemble différent qui est chargé à l'exécution!
Apparemment, Activator.CreateInstance ne peut pas instancier les types qui utilisent le {StaticResource XXX} extension de balisage, même lorsque la ressource statique est définie dans la définition du type.
Donc, si vous ne disposez que la définition de type suivant (type + fichier XAML):
<Page x:Class="Hurr.Durr">
<Page.Resources>
<ControlTemplate x:Key="whatever">
<TextBlock Text="This is a stupid example."/>
</ControlTemplate>
</Page.Resources>
<ContentControl Template="{StaticResource whatever}" />
</Page>
Comment qualifieriez-vous tourner cette place lors de l'exécution?
BTW, l'utilisation de DynamicResource à la place n'est pas acceptable. Est-ce que Visual Studio l'exige? Pourtant, VS est capable de générer une copie de votre élément de cadre WPF et de le coller dans le concepteur.
Voici un exemple d'application (bêta 2, désolé) qui illustre le problème.
http://cid-f8be9de57b85cc35.skydrive.live.com/self.aspx/Public/ResourcesGoKaboom.zip
L'application tente de charger une page avec un dessin dans son dictionnaire de ressources. J'essaie de le charger dynamiquement en utilisant Application.LoadComponent et Activator.CreateInstance et ils échouent tous les deux.
Bon, l'exemple ci-dessus fonctionne sans problème. Le problème était que j'utilisais une StaticResource dans les attributs d'un élément qui référencent une ressource définie dans cet élément. Ce qui me lançait était que cela fonctionne dans le studio visuel. Donc dans le concepteur tout avait l'air okey dokey mais IRL tout était en forme de poire. À mon humble avis, c'est un bug et je l'ai signalé comme tel:
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=519244
Je ne sais pas si son échec de VS à .... échec, ou si l'extension StaticResource travaillait dans VS, mais pas IRL.
Je ne peux pas reproduire ce problème - l'objet Page instancie correctement avec Activator.CreateInstance, et je peux utiliser la page instanciée dans un cadre, et le ContentControl et le modèle TextBlock s'affichent correctement. Pourriez-vous fournir plus de détails sur l'exception interne qui vous fait penser que c'est lié à StaticResource? Pouvez-vous confirmer que vous voyez l'échec même avec cet exemple simplifié? – itowlson
Création d'un exemple de projet maintenant. – Will
btw, c'est incroyable je n'ai pas bousillé le xaml lorsque je l'ai tapé de la mémoire dans l'éditeur de SO. – Will