2009-06-05 5 views
42

C'est très étrange.Pourquoi Visual Studio ne trouve-t-il pas ma méthode WPF InitializeComponent?

J'ai un fichier XAML qui se présente comme suit ...

<Window 
    x:Name="window" 
    x:Class="ix.Production.Title" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Title" Height="768" Width="1024" 
    Loaded="window_Loaded"> 

    <Window.Resources> 
    etc... 

Et mon code à côté qui se présente comme suit ...

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 compiler parce que Visual Studio insiste sur le fait que InitializeComponent "n'existe pas dans le contexte actuel".

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

+0

Arg, idiot idiot de mon côté (j'ai deux projets similaires). L'espace de noms de classe est correct, mais j'ai toujours la même erreur. – willem

Répondre

0

On dirait que ce fut une pliure dans Visual Studio 2008.

Si je crée un nouveau fichier (c.-à-Title2), copier/coller du code et XAML, puis changez tous les «Titre» en «Titre2», tout fonctionne bien à nouveau.

0

Votre classe est partielle, donc vous devriez avoir un autre fichier qui contient d'autres parties de votre classe Title (la méthode InitializeComponent par exemple). Essayez de trouver ce fichier, et voyez si l'espace de noms dans ce fichier est égal à l'espace de noms du fichier qui contient les autres parties de votre classe.

+0

Il dit partiel ... mais je me demande si le réel InitializeComponent n'est pas généré quelque part par WPF? Je ne suis pas sûr. Je n'ai pas réussi à le trouver. – willem

30

Votre dit XAML:

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 vers l'espace de noms ix.Production.

+0

Ceci! Je n'aime pas copier-coller et les espaces de noms ... –

+0

Merci, la pâte de copie se trompe à nouveau :) – Yablargo

5

Vos espaces de noms ne correspondent pas:

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

Je traînais 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

0

j'avais rencontré le même problème quand je suis arrivé un échantillon de projet de msdn. le problème était qu'il s'agissait d'un projet 4.0 et que je n'avais pas la version 4.0 dans mon système, quelques DLL référencées manquaient (system.xaml et un autre) les supprimaient. essayé de compiler, jetterait toujours la méthode initializecomponent non trouvée. est allé dans les propriétés du projet a changé le cadre cible à 3,5 et il ne se plaint plus.

1

J'ai eu le même problème avec un   Visual Studio 2010   projet exemple que je revins manuellement à Visual Studio de     2008. Je trouvais que j'avais oublié de définir le cadre cible du projet .NET Framework 3.5. Il était vide dans le projet est revenue à Visual   Studio   2008, initialement défini à 4,0 dans le projet Visual   Studio 2010 original  . 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 la liste déroulante Target Framework.

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

Visual Studio 2008 WPF project properties

44

Un cas que je l'ai vu ce qui se passe lorsque vous copiez coller un contrôle XAML/fenêtre, etc. La méthode InitializeComponent existe dans un fichier .g.cs correspondant qui est généré automatiquement. Dans mon cas, après copier coller, Action de construction pour le XAML (dans la fenêtre Propriétés) a été changé en "Ressource". I l'a changé pour "Page", et il a commencé à fonctionner correctement.

J'espère que cela aide. Le fil qui m'a aidé avec ceci était The name 'InitializeComponent' does not exist....

+2

J'ai beaucoup de problèmes lors de la copie et du collage, c'est bien de savoir vérifier. – cab

+0

Yap, juste eu ce problème lors de la copie de fichiers XAML entre les projets –

+3

+1 Mine a été changé en 'CodeAnalysisDictionary' après une opération Couper & Coller ... un bon Microsoft! Tout a été corrigé après le retour à 'Page'. Merci beaucoup gp. – Sheridan

13

si simple, mais si facile à oublier: l » x:ClassMainWindow a été réglé sur « MainWindow », quand il aurait dû être mis à namespace.MainWindow (x:Class="namespace.MainWindow"). Si cela n'est pas fait, le fichier MainWindow.g.xaml n'inclura pas de bloc d'espace de noms et l'appel au constructeur dans MainWindow ne fonctionnera pas.

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

2

Je rencontre généralement ce problème lorsque je renommer des classes de contrôle personnalisées ou, comme dans votre cas, modifier 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 dans les fichiers XAML et C#.

Le refactoring est seulement bon quand vous venez de renommer la classe, pour renommer l'espace de nom, vous devez le faire manuellement. Pour InitializeComponent, regardez [Project Folder]\obj\Debug\<class_name.g.cs>.

+1

Ou simplement supprimer le fichier entier \ obj et laisser Visual Studio le reconstruire – JordanBean

+0

Ou cela, j'allais pour une réponse complète :) –

0

FWIW, je frappe le même problème aujourd'hui après la migration d'un   Visual Studio 2008   solution à Visual Studio de     2010. Il semble que la migration et les projets gaffé ont perdu leur Target Framework (dans les propriétés du projet): Le réglage est maintenant vide !? Le paramètre .NET Framework 3.5 a résolu le problème.

1

Je ne parviens pas à trouver InitializeComponent et d'autres bits d'interface utilisateur liés au code XAML à partir du code au moment où j'ajoute ma PCL (qui contient mes classes de données) dans la solution.

: | Mais si j'enlève le PCL un .. il peut être retrouvé. Peu importe, que ce soit trouvé ou non - je peux toujours compiler. Je ne peux pas compléter automatiquement quand je tape le code.

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

0

Ce qui est arrivé à moi parce que Visual Studio définit la « action Build » à une action aléatoire lorsque vous copier/coller ou déplacer un fichier XAML d'un projet à un autre dans une solution.

Solution: Assurez-vous que votre "action de construction" est définie sur la page pour vous XAML. J'espère que cela aidera si c'est la même affaire pour vous.

Questions connexes