Pourquoi Visual Studio ne peut-il pas trouver ma méthode WPF InitializeComponent?

C’est très étrange.

J’ai un fichier XAML qui se présente comme suit …

  etc... 

Et mon code-à côté qui ressemble à ceci …

 using System; using System.Windows; using System.Windows.Media.Animation; using System.Threading; namespace ix.Production { public partial class Title : Window { public Title() { InitializeComponent(); } .... 

Ce code refuse de comstackr car Visual Studio insiste sur le fait que le composant InitializeComponent “n’existe pas dans le contexte actuel”.

Comment puis-je résoudre ce problème?

Un cas que j’ai vu se produire lorsque vous copiez collez un contrôle / fenêtre XAML, etc. La méthode InitializeComponent existe dans un fichier .g.cs correspondant généré automatiquement. Dans mon cas, après copier-coller, l’ action de construction pour le XAML (dans la fenêtre Propriétés) a été modifiée en “Ressource”. Je l’ai changé pour “Page” , et ça a bien fonctionné.

J’espère que ça aide.

Le thread qui m’a aidé avec ceci était le nom ‘InitializeComponent’ n’existe pas ….

Votre XAML dit:

 x:Class="ix.Production.Title" 

alors que la classe réelle est ix.Outage.Title . Modifiez la déclaration XAML ou déplacez la classe dans l’espace de noms ix.Production .

Si simple, mais si facile à ignorer: x:Class de MainWindow été défini sur ” MainWindow “, alors qu’il aurait dû être défini sur namespace.MainWindow ( x:Class="namespace.MainWindow" ). Si cela n’est pas fait, le fichier MainWindow.g.xaml pas de bloc d’espace de noms et l’appel à InitializeComponent() dans le constructeur de MainWindow ne fonctionnera pas.

Bien que cela ne soit évidemment pas une solution au problème de willem, je l’ai posté ici parce qu’il ya beaucoup d’autres solutions listées. Espérons que cela aidera quelqu’un d’autre qui trébuche sur ce post en essayant de résoudre leur problème.

Vos espaces de noms ne correspondent pas:

 x:Class="ix.Production.Title" namespace ix.Outage { ... 

J’ai généralement ce problème lorsque vous renommez des classes de contrôle personnalisées ou, comme dans votre cas, en changeant le nom de l’espace de noms de la classe. Si vous n’utilisez pas le refactoring de Visual Studio, vous devez modifier manuellement les noms des fichiers XAML et C #.

Le refactoring n’est bon que lorsque vous renommez la classe, pour renommer les espaces de noms, vous devez le faire manuellement.

Pour InitializeComponent , regardez dans [Project Folder]\obj\Debug\ .

Je n’arrive plus à trouver InitializeComponent et d’autres bits d’interface utilisateur liés à XAML à partir du code au moment où j’ajoute mon PCL (qui contient mes classes de données) dans la solution.

: |

Mais si je supprime le PCL .. il peut être retrouvé.

Peu importe, que ce soit trouvé ou non – je peux encore comstackr. Je ne peux tout simplement pas compléter automatiquement lorsque je tape du code.

Vous avez peut-être un projet PCL dans votre solution? (Je ne sais pas comment résoudre ce problème)

J’ai eu le même problème avec un exemple de projet Visual Studio 2010 que je suis revenu manuellement à Visual Studio 2008. J’ai constaté que j’avais oublié de définir le Framework cible du projet sur .NET Framework 3.5. Il était vide dans le projet renvoyé à Visual Studio 2008, initialement défini sur 4.0 dans le projet Visual Studio 2010 d’origine.

Pour définir le cadre cible d’un projet, accédez aux propriétés du projet, accédez au premier onglet appelé Application et sélectionnez .NET Framework 3.5 dans le menu déroulant Cadre cible.

Bien sûr, je préférerais que Visual Studio me donne une erreur ou au moins un avertissement que je n’avais pas défini mon Framework cible, mais bon, ça fait partie du développement dans Visual Studio, je suppose.

Propriétés du projet Visual Studio 2008 WPF

Votre classe est partielle. Vous devriez donc avoir un autre fichier contenant d’autres parties de votre classe Title (la méthode InitializeComponent par exemple). Essayez de trouver ce fichier et vérifiez si l’espace de noms dans ce fichier est égal à l’espace de noms du fichier contenant les autres parties de votre classe.

Il semblerait que ce soit un kink dans Visual Studio 2008.

Si je crée un nouveau fichier (c.-à-d. Title2), copiez / collez le code et XAML, puis remplacez tous les titres par «Title2», tout fonctionne à nouveau correctement.

Je me débattais avec le même problème ici. Ce que j’ai fait était de supprimer TOUS les fichiers créés sous le dossier de débogage, puis de reconstruire la solution.

Cordialement, Petrus

Je suis tombé sur le même problème lorsque j’ai reçu un échantillon de projet de msdn. le problème était que c’était un projet 4.0 et je n’avais pas le 4.0 dans mon système, quelques dlls référencés étaient manquants (system.xaml et un autre) les ont supprimés. tenté de comstackr, jetterait toujours la méthode initializecomponent introuvable. est allé dans les propriétés du projet a changé le cadre cible à 3.5 et il ne se plaint plus.

FWIW, j’ai rencontré le même problème aujourd’hui après la migration d’une solution Visual Studio 2008 vers Visual Studio 2010. Il semble que la migration ait échoué et que les projets aient perdu leur Target Framework (dans les propriétés du projet): Le paramètre est maintenant vide!

La configuration de .NET Framework 3.5 résolu le problème.

Cela m’est arrivé parce que Visual Studio définit l’action de génération sur une action aléatoire lorsque vous copiez / collez ou déplacez un fichier XAML d’un projet vers un autre dans une solution.

Solution: Assurez-vous que votre “action de construction” est définie sur page pour vous XAML.

J’espère que cela aide si c’est le même cas pour vous.