web-dev-qa-db-fra.com

Xamarin.Forms - InitializeComponent n'existe pas lors de la création d'une nouvelle page

J'utilise Visual Studio pour essayer Xamarin.Forms. J'essaie de suivre le guide: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/xaml-for-xamarin-forms/getting_started_with_xaml/

En bref, je crée une solution Xamarin.Forms en utilisant un PCL, puis j'essaie d'ajouter un Forms XAML Page au projet PCL.

Le code derrière qui est créé ressemble à ceci:

    public partial class Page1 : ContentPage
    {
        public Page1()
        {
            InitializeComponent(); 
        }
    }

Le problème ici est que InitializeComponent(); est en rouge . Lorsque j'essaie de construire, je suis informé que The name 'InitializeComponent' does not exist in the current context 

J'ai cherché des solutions et même si d'autres ont eu le même problème, leurs solutions ne fonctionneront pas pour moi. Voici une suggestion que j'ai essayé d'utiliser: http://blog.falafel.com/xamarin-error-initializecomponent-does-not-exist-in-the-current-context/

S'il vous plaît laissez-moi savoir si vous avez une solution à ce problème. Merci!

Mettre à jour:

Ma PCL (à laquelle je souhaite également ajouter ma page XAML) contient:

App.cs:

    public class App : Application
    {
        public App()
        {
            // The root page of your application
            MainPage = new ContentPage
            {
                Content = new StackLayout
                {
                    VerticalOptions = LayoutOptions.Center,
                    Children = {
                        new Label {
                            XAlign = TextAlignment.Center,
                            Text = "Welcome to Xamarin Forms!"
                        }
                    }
                }
            };
        }

        protected override void OnStart()
        {
            // Handle when your app starts
        }

        protected override void OnSleep()
        {
            // Handle when your app sleeps
        }

        protected override void OnResume()
        {
            // Handle when your app resumes
        }
    }

Et ma page XAML:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
             x:Class="XamaTest.MyXamlPage">
    <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
</ContentPage>

Code-behind:

    public partial class MyXamlPage : ContentPage
    {
        public MyXamlPage()
        {
            InitializeComponent();
        }
    }
58
user2915962

UPDATE: Cette erreur n'apparaît généralement pas dans VS 2015. Si c'est le cas, voici ma réponse initiale:

Trouvez la solution! Faites un clic droit sur le fichier .XAML, sélectionnez Propriétés.

Vous verrez une propriété appelée Custom Tool. Changez sa valeur de MSBuild:Compile à MSBuild:UpdateDesignTimeXaml

Cela résoudra le problème . Je ne sais pas pour le vote négatif, mais voici ma capture d'écran:

 Screenshot METTRE À JOUR:

Il réapparaît rarement. Si c'est le cas, ouvrez simplement Xaml et le code derrière les fichiers et enregistrez-les. Je sais que ce n'est pas la meilleure solution, mais le travail est fait.

54
Dushyant Bangal

En ce qui concerne mon observation, dans Visual Studio 2015, les propriétés XAML sont déjà définies, comme le suggèrent les réponses à vote élevé ici par défaut, plus précisément:

  • Outil personnalisé = MSBuild:UpdateDesignTimeXaml
  • Action de construction = Embedded Resource

mais l'erreur apparaît encore parfois ... (comme dans cette autre question ).

Éditer le fichier XAML correspondant puis appuyer sur CTRL+S devrait bien fonctionner, mais vous n’avez pas à le faire. Une méthode plus simple pour forcer l'exécution des outils personnalisés consiste à cliquer avec le bouton droit de la souris sur le fichier XAML, puis à cliquer sur le menu contextuel "Exécuter l'outil personnalisé".

enter image description here

30
har07

Je comprends cela parfois et voici la liste de contrôle qui les a résolus jusqu'à présent:

  1. Assurez-vous que les espaces de noms dans .xaml et .xaml.cs correspondent

  2. Hériter du parent correct - ContentPage pour une page et ContentView pour un contrôle

  3. Définissez l’action de génération du fichier .xaml sur Embedded Resource si elle se trouve dans le projet partagé.

28
root

J'ai rencontré ce problème. Il est associé à l'encodage de fichiers XAML dans VS. J'utilise VS2015. 

J'ai résolu ce problème comme suit:

  1. Ouvrez le fichier * .xaml dans le projet et cliquez sur le bouton Enregistrer. (Il y aura application du codage correct dans VS2015).

  2. Puis rouvrez le projet et reconstruisez-le. Maintenant, il n'y a pas d'erreur.

12
Roman Himadinov

La mise à jour du paquet Xamarin.Forms NuGet devrait faire l'affaire.

10
Thomas Weller

Ce n'est probablement pas votre cas, mais j'avais un problème similaire et le mien était xaml et le code derrière le nom qui ne correspondait pas. Par exemple, selon votre exemple, si le code situé derrière le namespace est XamaTest (nom de votre application dans la plupart des cas) et que la classe s'appelle MyXamlPage, votre nom de classe xaml doit être XamaTest.MyXamlPage ([namespace]. [classname]).

J'étais idiot après avoir créé un xaml vide avec du code derrière, j'ai changé le nom de la classe en xaml et j'obtenais cette erreur. 

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
             x:Class="XamaTest.MyXamlPage">
    <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
</ContentPage>

Code-behind:

public partial class MyXamlPage : ContentPage
4
batmaci

Essayez d’ajouter ax: Name = "..." sur la page xaml ... Rien d’autre n’a fonctionné pour moi - mais après avoir ajouté l’attribut x: Name sur certains des éléments de la page, l’erreur disparaissait toujours l'obtenir parfois). J'utilise la dernière version (1.5.0.6447) de Xamarin.Forms ...

XAML ne fonctionne pas sur des projets partagés - cela ne fonctionne que dans des projets portables ...

4
Kim Rasmussen

Si vous obtenez des erreurs intellisense telles que InitializeComponent dans vos pages Xamarin.Forms mais que le projet se construit et fonctionne correctement, ajoutez simplement une nouvelle page Formulaires à l'aide de l'assistant pour corriger toutes les erreurs ...

Ensuite, vous pouvez supprimer cette nouvelle page.

3
Guillaume Perrot

Je suis tombé sur cette erreur quand;

  1. J'ai supprimé un ContentPage-cs+xaml et le App-cs+xaml du projet sans le supprimer réellement. 
  2. Re-ajouté ces au projet dans un autre dossier.

Ceci a été corrigé par;

  1. Sélectionnez le fichier .xaml de la classe dans laquelle le problème est présent.
  2. Faites un clic droit et sélectionnez properties.
  3. Dans Build action, sélectionnez "Ressource intégrée".
  4. Dans Custom Tool, tapez "MSBuild: UpdateDesignTimeXaml"
  5. Clean and Build et il était parti.
3
7vikram7

Vérifiez le texte de la page x:Class="AppName.Page1". AppName doit être le nom de votre application

3
developer d

Il semble que le problème réside dans la (re) génération des fichiers blah.xaml.g.cs. Je reçois cela beaucoup dans les projets partagés (c'est pourquoi je ne les utilise pas sauf si je n'ai pas d'autre choix). Cela se produit beaucoup plus dans Xamarin Studio que dans Visual Studio, pour moi, pour une raison quelconque. J'essaie de ne pas utiliser XS du tout.

Décharger souvent l’une des autres plates-formes (par exemple, si vous construisez un droïde, déchargez un ios) et effectuer un nettoyage et une reconstruction résoudront le problème. 

Vous pouvez également essayer d'ouvrir le fichier .xaml incriminé et de modifier le balisage xaml (par exemple, ajouter ou modifier un x:Name dans l'un des contrôles ou des vues). Cela forcera la régénération du fichier xaml.g.cs et résoudra (du moins pour moi) le problème.

Cela ne devrait vraiment pas être une chose tho. 

3
wislon

Cliquez avec le bouton droit de la souris sur * .xaml, cliquez sur Propriétés, puis remplacez la valeur "Outil personnalisé" par "MSBuild: UpdateDesignTimeXaml", puis remplacez les propriétés "Action de génération" par " Ressources incorporées ", le projet de génération fonctionne.

2
Ali Yousefie

Un nettoyage et une reconstruction ont fait l'affaire pour moi!

2
machie27
  • J'ai eu un problème similaire dans l'environnement Visual Studio 2013 update 4 et j'ai essayé toutes les recommandations que j'ai trouvées sur le Web. Rien n'a résolu mon problème. 
  • Ensuite, j'ai essayé l'approche de contournement. J'ai installé Visual Studio 2015 preview et créé une nouvelle application vierge avec le projet xamarin forms. 
  • Lorsque j’ai ajouté le nouveau fichier Xaml, tout était OK et le problème avec la méthode InitialComponent a disparu. 
  • Je ne sais pas où est exactement la raison du problème, mais il semble y avoir un problème avec les paramètres de configuration.
2
Tomas Repka

Solution très simple qui a fonctionné pour moi:

  • Copier le contenu du fichier xaml/cs
  • Supprimer le fichier xaml/cs
  • Créer une nouvelle classe et coller le contenu

Maintenant, la fonction InitializeComponent () apparaît sans soulignement rouge.

J'espère que ça aide quelqu'un.

2
Samir Tamri

Ce problème apparaît lorsque les projets de solution font référence à la version 1.4.0.0 des DLL "Xamarin.Forms.Core", "Xamarin.Forms.Xaml" et "Xamarin.Forms.Platform" version 1.0.0.0.

Pour le résoudre, j'ai dû passer à la version 1.3.3.0 des DLL, mais avec cette version Xamarin.Forms.Platform 1.0.0.0 n'existe pas.

1
Pulcker

J'ai eu un problème de mise en cache lorsque j'ai rencontré cette erreur.

Pour résoudre ce problème, il suffit de uninstall dernière version du paquet Xamarin.Forms et réinstaller une version antérieure.

Une fois la reconstruction réussie, mettez à jour le paquet à la dernière version.

1
Ali Yousefie

Vérifiez le nom de la classe correctement.

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
         x:Class="{AppName}.{ClassName}">
</ContentPage>

Le nom de la classe doit être une combinaison du nom de l'application et du nom de classe partiel.

1

J'ai eu le même problème de temps en temps, et voici ce que j'ai fait pour le résoudre: Lorsque je suis dans le projet PCL, j'ajoute une nouvelle page XAML multiplateforme au projet. L'ajout d'une nouvelle page XAML prend quelques secondes pour que les références se "raccrochent". Une fois la nouvelle page XAML ajoutée au projet, les soulignements rouges sur les pages XAML (avec les problèmes) sont effacés. Une fois le problème résolu, je supprime simplement le fichier XAML que je viens d’ajouter. - En résumé, ajouter une nouvelle page XAML puis la supprimer a résolu le problème pour moi.

1
zinczinc

Je viens mis à jour Tous les paquets , fonctionne bien.

1
Arun Prasad E S

Vérifiez la version du package Xamarin.Forms référencée dans votre projet.

 .csproj file  Xamarin.Forms nuget package

1
user1412699

Changez les propriétés de la page en:

BuildAction => Embedded resource 
CustomTools => MSBuild:UpdateDesignTimeXaml
1
M. Hamza Rajput

Je ne sais pas si cela est résolu, mais pour moi, la seule chose à faire est de supprimer la première ligne du XAML ("xml version =" 1.0 "encoding =" utf-8 ")

Parfois, le contrôle de version source tente d'identifier le type de fichier et d'ajouter ce type de contenu.

0
Miguel Laborde

Il semble que cela soit causé par beaucoup de choses, donc si vous avez lu tout cela et que vous ne l'avez pas encore résolu:

Le mien est dû à la configuration de Solution définie sur Release . Remplacé par Debug et erreur résolue.

0
Phil P

Dans mon cas, le problème était le chemin du projet . Le fichier de code généré reçoit un nom, y compris le chemin absolu, codé pour en faire un nom de fichier valide. Le chemin était "D:\Projekt C #\ProjectRootFolder\Project" . Le nom de fichier généré par l'outil de génération était "Project.Droid.D_.Projekt_C_. Espace de noms, etc.". chemin comme "D:\project\ProjectRootFolder" a aidé dans mon cas.

0
Denis Reichelt

La solution ultime serait d’éditer le fichier de projet dans un éditeur de texte et de copier le motif à partir d’un autre fichier non conflictuel. Cette solution a fonctionné pour moi. Habituellement, vous rechercherez cette syntaxe:

<Compile Update="Your\Path\YourContentPage.xaml.cs">
  <DependentUpon>YourContentPage.xaml</DependentUpon>
</Compile>
0
mr5

Il me manquait un attribut de référence spécifique (util dans mon cas) dans l'élément racine:

<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml" 
    x:Class="MyProject.Views.HomePage"
    xmlns:util="clr-namespace:Porject.Library.Util;Assembly=Library"
    >
0
Jannie Theunissen
  1. Sélectionnez les fichiers App.xaml et MainPage.xaml de la classe dans laquelle le problème est présent.
  2. Faites un clic droit et sélectionnez les propriétés.
  3. Dans l'action Build, sélectionnez "Ressource incorporée".
  4. Dans le type d'outil personnalisé "MSBuild:UpdateDesignTimeXaml"
  5. Clean and Build et il était parti.
0
Endrit

J'ai eu le même problème avec VS Community Edition 2019, je viens d'utiliser régénérer solution et le problème a été résolu

0

ajouter using Xamarin.Forms.Xaml

testé sur Visual Studio 2017

0
TheFranzMaster

J'utilise Visual Studio 2015, j'ai le même problème et je n'ai trouvé aucune des réponses sur le net comme étant une solution complète… .. Ici, je vais expliquer ce qui a fonctionné pour moi.

Mon objectif principal ici était d'éliminer le message d'erreur rouge qui revenait sans cesse 

Le nom InitializeComponent n'existe pas dans le contexte actuel

En gros, j'ai créé une fonction appelée InitializeComponent2() qui fait exactement la même chose que InitializeComponent() et je l'ai utilisé à la place, j'ai littéralement copié le code pour InitializeComponent(). Fait le travail.

Cela ressemble à ceci (et je vais expliquer):

[System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
private void InitializeComponent2()
{
    // Change to:
    //   this.LoadFromXaml(typeof(Page2)); // for Page2
    //   this.LoadFromXaml(typeof(Page3)); // for Page3
    // and put
    //   using Xamarin.Forms.Xaml;
    // at the top of each source file.
    this.LoadFromXaml(typeof(Page1));
}

Placez la fonction dans la définition de chacune de vos pages (fichiers .cs), par exemple.

public partial class Page1 : ContentPage
{
    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
    private void InitializeComponent2()
    {
        // Change to:
        //   this.LoadFromXaml(typeof(Page2)); // for Page2
        //   this.LoadFromXaml(typeof(Page3)); // for Page3
        // and put 
        //   using Xamarin.Forms.Xaml; 
        // at the top of each source file.
        this.LoadFromXaml(typeof(Page1));
    }
}

De plus, vous devez mettre using Xamarin.Forms.Xaml; en haut de chaque page .csLoadFromXaml(..) est utilisé.

Et bien sûr, changez InitializeComponent() en InitializeComponent2() pour appeler la nouvelle fonction . I.e. vous avez placé la fonction dans le même contexte que la page en faisant disparaître l'erreur. Je ne peux pas imaginer que la vraie fonction InitializeComponent obtiendra quoi que ce soit au fur et à mesure que vous modifierez votre projet, mais c'est une possibilité ..__ Cela a été très bien pour moi jusqu'à présent.

J'ai essayé beaucoup de choses, changer l'action de construction, l'espace de noms XAML, redémarrer vs, nettoyer + reconstruire, rechercher les mises à jour du paquet NuGet.

Fondamentalement, Visual Studio a compilé et exécuté le programme correctement sur mon émulateur + appareil Android, mais ce message d'erreur ne disparaîtra pas ... Ma solution est pour Android, mais elle peut également fonctionner pour iOS, etc.

Je suis retourné à la racine du problème InitializeComponent(). Le code réel de cette fonction est généré dans un fichier appelé <Your Project Name>.Page1.xaml.g.cs ou Page2.xaml.g.cs par exemple. Cependant, il (le fichier) n'est Généré que lorsqu'un événement donné est déclenché. J'ai eu la chance de découvririt en tapant du texte dans "Custom Tool Namespace", qui a déclenché cet événement, pour l'une des pages xaml (un fichier se terminant par .xaml, pas .cs - assurez-vous d'avoir sélectionné le fichier .xaml), tapez du texte et appuyez sur enter et le fichier sera créé.

Ensuite, j'ai eu la bonne idée de créer InitializeComponent2(), une fonction identique à celle de InitializeComponent() et de la placer dans chaque fichier cs pour qu'il existe Sans avoir à générer le .xaml.g.cs à chaque fois que vous voulez que l'erreur disparaisse

0
Dougie

Dans Xaml Page Properties uniquement
Build Action = Embedded resource
Cela fonctionne dans visual studio 2017.

0
saleem kalro

J'ai essayé tout ce qui précède et aucune chance, ce qui a bien fonctionné pour moi a été de forcer la réinstallation des paquets Xamarin.Forms. Dans la console du gestionnaire de paquets, cliquez sur Invite.

update-package xamarin.forms -reinstall

Il ne met pas à jour les paquets, supprime et ajoute de nouveau

0
user755404