wpf - visual - Le nom 'InitializeComponent' n'existe pas dans le contexte actuel




wpf tutoriel (20)

Si je crée un nouveau projet dans Visual Studio 2010 SP1 et sélectionnez "Application WPF" et tente de générer l'application générée, j'obtiens l'erreur

Le nom 'InitializeComponent' n'existe pas dans le contexte actuel.

J'ai eu une erreur similaire ce matin quand j'ai essayé de construire mon projet actuel. Hier, je n'ai eu aucun problème à le compiler et à le gérer.

J'ai créé un nouveau projet et j'ai eu l'erreur chaque fois que j'ai compilé le projet. Je viens d'envoyer le projet à un collègue, et il vient de compiler sans aucune erreur.

Qu'est-ce qui ne va pas?


  1. Accédez au répertoire de la solution
  2. Supprimer le dossier \ obj
  3. Reconstruire la solution

J'ai rencontré cette erreur lors du refactoring où j'ai renommé certains fichiers / dossiers et les fichiers * .g.cs préexisants devaient être régénérés.


Après une action, l'espace de noms du fichier .cs et celui du fichier .xaml peuvent être différents (dans xaml, recherchez x: Class = "namespace.yourType").

Fixez-les pour qu'ils soient identiques.


Aucune des réponses ci-dessus n'a fonctionné pour moi. Je les ai tous essayés sauf les doublons. Cependant, pour une raison étrange, cela a fonctionné dans mon projet multi-plateforme dans Visual Studio 2015:

  1. Cliquez avec le bouton droit sur le projet à l'origine du problème dans l'Explorateur de solutions. Dans le menu contextuel, choisissez: Ajouter -> Classe
  2. Sélectionnez multi-plateforme -> Formulaires Xaml Page. Conservez le joli nom standard de Page1.cs et cliquez sur Ajouter.
  3. Notez comment le problème InitializeComponent () précédent a disparu pour une raison quelconque.
  4. Supprimez la page1.cs nouvellement créée et continuez la programmation comme si Visual Studio fonctionnait correctement.

Cela a résolu pour moi.

J'avais commenté les ressources dans le fichier App.xaml

<Application x:Class="MyApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Application.Resources>
    <!--<ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary
            Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>-->
  </Application.Resources>
</Application>

Commenter cela revient à corriger l'erreur de construction.

<Application x:Class="MyApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Application.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary
            Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Application.Resources>
</Application>

En creusant un peu plus loin, j'ai trouvé que le fichier app.g.cs dans {Project} \ obj \ debug ne contenait que ce qui suit lorsque j'ai laissé la ressource commentée.

/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
    if (_contentLoaded) {
        return;
    }
    _contentLoaded = true;
    System.Uri resourceLocater = new System.Uri("/MyApp;component/app.xaml", System.UriKind.Relative);

    #line 1 "..\..\..\App.xaml"
    System.Windows.Application.LoadComponent(this, resourceLocater);

    #line default
    #line hidden
}

Déchargez la solution entière et rechargez-la à nouveau. Ensuite, reconstruisez la solution. Cela a résolu le problème pour moi.


Faites un clic droit sur le dossier dans le projet pour créer un nouveau UserControl qui était le problème pour moi. J'ai créé le même contrôle sur le côté du dossier et c'était tout.



J'ai eu ceci (bien que c'était vraiment ma faute et a été laissé après que j'ai copié et ai collé du code dedans); il peut se produire lorsque l'espace de noms ne correspond pas entre le code XAML et le code derrière

PAR EXEMPLE

<UserControl x:Class="DockPanel.TreeView" />

et le code derrière est

namespace NotThePanelItShouldBe

J'ai eu le même problème, mais dans mon cas, rien de tout cela n'a aidé. Dans ma situation, chaque projet WPF que j'avais (y compris les nouveaux projets) a arrêté de compiler avec cette erreur. Finalement, j'ai désinstallé tous les frameworks .Net puis je les ai réinstallés et les choses ont recommencé. J'ai également fait une réinstallation de Visual Studio, mais il s'est avéré que cela n'avait aucun effet.


J'ai eu le même problème, s'attendre à ce que j'ai copié mon MainWindow xaml et cs dans un nouveau fichier, puis les a copiés à leur place d'origine. J'ai ensuite eu cette erreur après avoir essayé de compiler l'application WPF.

Ce que j'ai fait pour corriger cette erreur était de renommer l'espace de noms (à partir de egNamespace -> egNamespaceNew, et cela a fonctionné à nouveau.) J'ai ensuite changé l'espace de noms en celui d'origine.


J'essaie toutes les suggestions ci-dessus. Si vous essayez aussi sans succès obtenir le moyen le plus facile. Créez un nouveau page.xaml puis copiez votre code pour la nouvelle classe et supprimez la classe XAML avec des problèmes. Ne pas passer plus de temps.


Je l'ai rencontré quelques fois et continue à oublier ce qui le cause. J'ai couru dans ceci quand j'ai renommé l'espace de noms sur mon code derrière le dossier mais pas dans mon XAML.

Alors vérifiez si vous avez fait la même chose.

Les noms d'espaces de noms et de classes doivent correspondre car ils font partie d'une classe partielle

namespace ZZZ
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow
    {
         //...
    }
}

<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">

Je viens de rencontrer ce problème, et il s'est avéré que mon projet est stocké dans mon dossier utilisateur, qui est stocké sur le réseau, et nous avons eu une panne de réseau momentanée. J'ai fait une construction; il se plaignait que mes fichiers avaient été modifiés en dehors de l'éditeur (ils ne l'avaient pas fait, les verrous de fichiers venaient juste d'être bogués), et il s'est bien construit, supprimant l'erreur concernant la méthode InitializeComponent() .

BTW, au cas où vous vous poseriez, développer quelque chose à partir d'un lecteur réseau est une mauvaise pratique. Cela devient particulièrement problématique lorsque vous essayez de tirer parti du code managé de .NET; D'après mon expérience, ça panique chaque fois que vous construisez. J'ai oublié de mettre ce petit projet dans le bon dossier, et j'ai fini par payer le prix.


L'action de construction pour le fichier .xaml doit également être définie sur "Page", lors du déplacement d'un fichier xaml entre des projets, ce paramètre est perdu (dans VS 2010 au moins).


Pour ceux qui trouvent cela sur internet. Vérifiez le fichier Windows.csproj si la compilation est là. Il devrait y avoir 2 entrées

<Page Include="YourFile.xaml">
  <SubType>Designer</SubType>
  <Generator>MSBuild:Compile</Generator>
</Page>

<Compile Include="YourFile.xaml.cs">
  <DependentUpon>YourFile.xaml</DependentUpon>
</Compile>

Si les espaces de noms sont corrects, il y a également une même erreur,

Fermez simplement votre application et ouvrez-la à nouveau .

Cela peut résoudre votre problème


Une autre cause fréquente de cette erreur est si vous avez fait quelque chose dans ceci:

  1. Cliquez avec le bouton droit sur le dossier dans le projet pour créer un nouveau UserControl. Cela crée un fichier class et xaml qui dérive du contrôle utilisateur dans l'espace de noms du dossier.

  2. Ensuite, vous décidez de changer l'espace de noms de la classe parce que vous n'utilisez que des dossiers pour l'organisation du code. L'attribut x: Class ne sera pas automatiquement mis à jour, donc il recherchera une classe qui n'existe pas. Pourrait probablement utiliser un meilleur message d'erreur comme "x: Type de classe n'a pas pu être trouvé dans namesace bla.blaa.blaaa."


Une autre explication possible est que vous construisez contre x86. Cliquez avec le bouton droit sur votre solution et choisissez Configuration Manager. Voyez si vous construisez contre x86 au lieu de n'importe quel CPU.


Vous pouvez obtenir cette erreur lorsque vous importez une classe d'un autre projet, ou modifiez le chemin d'accès du fichier xaml ou l'espace de noms du fichier .cs xaml ou behind.

Un: Il pourrait avoir un espace de noms qui n'est pas le même que ce que vous avez dans votre nouveau projet

namespace TrainerB.MVC.Forms
{
     public partial class AboutDeveloper : ContentPage
     {
          public AboutDeveloper()
          {
               InitializeComponent();
          }
     }
}

Comme vous pouvez le voir l'espace de nom dans le fichier importé commence avec l'ancien nom de projet: "TrainerB" , mais votre nouveau projet pourrait avoir un nom différent, donc changez-le simplement au nouveau nom de projet correct, dans le fichier .xaml et le fichier derrière .cs.

Deux:

changez les propriétés du fichier .xaml en:

Créer une action: ressource intégrée

Outil personnalisé: MSBuild: UpdateDesignTimeXaml


c'est arrivé avec moi quand j'ai accidentellement supprimé la référence de la classe de la définition xaml:

J'ai remplacé le

<Window x:Class="myapp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

première ligne avec ceci:

<RibbonWindow 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

Je sais que ce n'est pas la réponse à la question originale (parce que ce projet s'appuie sur une autre machine), mais le message d'erreur était le même, alors peut-être que je vais aider quelqu'un avec cette situation.





initializecomponent