Concepteur WPF “impossible de créer une instance de type”
Dans mon INTERFACE XAML je suis essentiellement d'hériter d'une classe "BaseView" qui contient des fonctionnalités communes à plusieurs formes, cependant, c'est d'empêcher le designer de l'affichage de la forme: "impossible de créer une instance de type BaseView". Le code de compiler et de l'exécuter, mais il est frustrant de ne pas être en mesure de voir le formulaire dans le Concepteur. Est-il un meilleur moyen? Merci.
XAML:
<vw:BaseView
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vw="clr-namespace:ReviewClient"
x:Class="ReviewClient.MainPage"
...
- Est ReviewClient de l'assemblage parent pour le XAML? Si non, vous devez ajouter un ReviewClient référence à l'assembly contenant ce fichier XAML.
- ReviewClient est l'espace de noms local.
Vous devez vous connecter pour publier un commentaire.
Le problème est que la classe de base a été défini comme abstraite. Cela a provoqué le concepteur à l'échec. Ce problème est décrit plus en détail dans la section des commentaires de Laurent Bugnion du blog: http://geekswithblogs.net/lbugnion/archive/2007/03/02/107747.aspx
J'ai trouvé très utile de solution à cela :
http://www.progware.org/Blog/post/WPF-Designer-Error-Could-not-create-an-instance-of-type.aspx.
Ce lien explique comment le concepteur WPF fenêtre s'exécute le Constructeur pour afficher l'INTERFACE utilisateur dans le code XAML et le remède:
ajouter l'extrait de code suivant à n'importe quelle partie de code constructeur qui pourrait être de donner d'erreur:
le nom de la fonction est auto-explicatif. 🙂
Ce lien fournit également des solutions sur le débogage de problèmes avec XAML.
Une autre cause possible, comme nous venons de le trouver ici, je suis donc l'ajout de cette réponse pour les futurs utilisateurs, c'est que si le projet est hébergé sur une source non fiable, tel qu'un serveur de fichiers.
Dans ce cas, le concepteur ne pas charger l'assembly et donc a donné le même "ne Peut pas créer d'instance..." erreur. La solution serait de toujours construire et déboguer OK.
Une autre cause. Ma classe de contrôle avait un champ statique qui a été initialisée à partir des ressources disponibles, comme ceci:
Qui lancerait une référence nulle exception dans le code XAML de l'éditeur, puisque les ressources ne sont pas disponibles en mode création. Ont-il pas la couleur de la ressource (par exemple, un pinceau), ce ne sera pas un problème, mais un transtypage vers le type de valeur jette sur une référence null.
Encore une autre cause possible.
J'ai un contrôle utilisateur qui a des contrôles enfants qui génèrent des événements par exemple selection_changed sur la liste de contrôle. Le select_changed gestionnaire d'événement apporte des modifications à d'autres contrôles enfants.
Pendant l'initialisation de l'élément sélectionné de la propriété de la zone de liste est modifiée et déclenche une selection_changed événement. Le gestionnaire tente de mettre à jour les autres contrôles enfants, mais ne peut pas parce qu'ils n'ont pas encore été instancié. Cela conduit à une exception de pointeur null et provoque le problème.
Une fois que le pointeur null problème a été géré le contrôle a pu être instancié et est apparu dans le contrôle parent.
J'ai le problème que mon MVVM classe ont accès à la base de données dans le constructeur et qui était le problème, il lève une exception. Je n'ai qu'à vérifier si l'application est en cours d'exécution en mode de Conception.
En WinForms, il est possible d'utiliser le concepteur avec l'abrégé de contrôle si vous utilisez un personnalisé
TypeDescriptionProvider
à informer le concepteur de la mise en œuvre concrète:Je suis en utilisant la solution dans cette réponse à une autre question, qui relie cet article. L'article recommande l'utilisation d'un personnalisé
TypeDescriptionProvider
et la mise en œuvre concrète de la classe abstraite. Le concepteur va demander au fournisseur personnalisé types à utiliser, et le code de retour de la classe de béton, de sorte que le concepteur est heureux alors que vous avez le contrôle complet sur la façon dont la classe abstraite apparaît comme une classe concrète.Et une autre situation possible (ce qui est réel pour au moins SL pour WP):
Si vous créez instanse de votre classe (ex.
<local:MyDataSource />
) puis il doit être public. Si votre classe est interne, il s'appliquera au moment de la conception, mais échouera avec cette exception à l'exécution.La raison pour laquelle j'ai été faire cette erreur était simple mais difficile pour moi de la piste vers le bas. Mon convertisseur de classe n'était pas public. Il suffit de changer la classe de l'accessibilité, il fixe.