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

J'utilise Visual Studio pour essayer Xamarin.Forme. Je suis en train de suivre le guide: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/xaml-for-xamarin-forms/getting_started_with_xaml /

bref, je crée un Xamarin.Solution de formulaires à l'aide d'un PCL, puis essayez d'ajouter un Forms XAML Page à la PCL-projet.

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 Rouge. Quand 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 j'ai essayé d'utiliser: http://blog.falafel.com/xamarin-error-initializecomponent-does-not-exist-in-the-current-context /

s'il vous plaît faites-moi savoir si vous avez une solution pour résoudre ce problème. Merci!

mise à jour:

Mon PCL (qui est l'endroit où je tiens aussi à ajouter mon code XAML de la page) 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 mon XAML-page:

<?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
demandé sur Brandon Minnick 2015-03-02 23:05:07

30 réponses

mise à JOUR: Cette erreur n'apparaît généralement pas dans VS 2015, si elle le fait, voici ma réponse originale:

trouvé la solution! Clic droit sur le .Fichier XAML, sélectionnez propriétés .

vous verrez une propriété appelée outil personnalisé . Changer sa valeur de MSBuild:Compile à MSBuild:UpdateDesignTimeXaml

cela résoudra le problème. Ne sais pas sur le downvote, mais voici ma capture d'écran:

Screenshot mise à jour:

il réapparaît rarement. Si c'est le cas, il suffit d'ouvrir Xaml et le code derrière les fichiers et de les enregistrer. Je sais, ce n'est pas la meilleure solution, mais il fait le travail.

54
répondu Dushyant Bangal 2016-10-13 07:28:28

en ce qui concerne mon observation, dans Visual Studio 2015, les propriétés XAML sont déjà définies comme suggéré par les réponses hautement votées ici par défaut, en particulier:

  • Outil Personnalisé = MSBuild:UpdateDesignTimeXaml
  • "151950920 De Construire" Action = Embedded Resource

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

éditant le XAML correspondant fichier et ensuite frapper CTRL + S devrait fonctionner très bien, mais vous ne devez pas. Une façon plus propre de forcer les outils personnalisés à être exécutés est de cliquer avec le bouton droit de la souris sur le fichier XAML, puis de cliquer sur le menu contextuel "Exécuter L'outil personnalisé".

enter image description here

26
répondu har07 2017-05-23 12:02:46

je reçois parfois et voici la liste de contrôle qui les a résolus à ce jour:

  1. assurez-vous que l'espace de nom dans .xaml et .XAML.cs match

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

  3. Définir l'action de construire de la .fichier xaml Embedded Resource si, dans le projet partagé.

24
répondu root 2016-12-29 22:00:10

j'ai rencontré ce problème. Il est associé avec le codage des fichiers XAML dans VS. J'utilise VS2015.

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

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

  2. puis rouvrir le projet et le reconstruire. Maintenant, il n'y a pas d'erreurs.

11
répondu Roman Himadinov 2017-06-08 19:29:01

mise à jour de la Xamarine.Les formes de package NuGet devrait faire le travail

8
répondu Thomas Weller 2018-04-24 16:52:05

essayez d'ajouter un x: 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 a disparu (la plupart du temps - je l'obtiens encore parfois). J'utilise la dernière version (1.5.0.6447) de Xamarin.Forme...

XAML ne travaille pas sur des projets partagés - il ne travaille que sur des projets portables...

4
répondu Kim Rasmussen 2015-09-30 06:51:44

on dirait que la (ré)génération des fichiers blah.xaml.g.cs est en fait le problème. Je l'obtiens beaucoup dans les projets partagés (c'est pourquoi je ne les utilise que si je n'ai pas d'autre choix). Ça se passe bien plus dans Xamarin Studio que dans Visual Studio, pour moi, pour une raison quelconque. J'essaie de ne pas utiliser de XS du tout.

déchargez souvent l'une des autres plateformes (par exemple si vous construisez droid, déchargez ios) et faire un nettoyage et une reconstruction la réparera.

You peut également essayer de faire quelque chose comme ouvrir l'un des fichiers .xaml offensants et changer une partie du markup xaml (par exemple en ajoutant ou en changeant un x:Name à l'un des contrôles ou des vues). Cela va forcer une régénération du xaml.G. fichier cs, et (pour moi au moins) règle généralement le problème.

cela ne devrait vraiment pas être une chose tho.

3
répondu wislon 2015-12-01 00:58:50

ce n'est probablement pas votre cas, mais j'ai eu le même problème et mon un était xaml et le code derrière nom missmatching. par exemple, selon votre échantillon, si le code derrière 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].[nom de classe])

j'ai été stupide après avoir créé un XAML vide avec le code derrière, j'ai changé le nom de la classe dans xaml et je recevais 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
3
répondu batmaci 2015-12-06 23:53:36

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. les a rajoutés au projet dans un autre dossier.

elle a été fixée par;

  1. , Sélectionnez .xaml fichier de la classe dans laquelle le problème est présent.
  2. clic droit et sélectionner properties .
  3. dans Build action sélectionner" ressource intégrée "
  4. In Custom Tool type "MSBuild: UpdateDesignTimeXaml "
  5. Propre et Construire et il a disparu.
3
répondu 7vikram7 2017-06-08 19:27:16

si vous obtenez des erreurs intellisense telles InitializeComponent dans votre Xamarin.Les pages de formulaires mais le projet construit et court en fait bien, il suffit d'ajouter une nouvelle page de formulaires en utilisant l'assistant pour corriger toutes les erreurs...

alors vous pouvez supprimer cette nouvelle page.

3
répondu Guillaume Perrot 2017-06-30 20:23:11

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

3
répondu developer d 2017-09-09 19:03:48
  • j'ai eu un problème similaire dans Visual Studio 2013 mise à jour 4 environnement et j'ai essayé toutes les recommandations ce que j'ai trouvé sur le web. Rien n'a résolu mon problème.
  • puis j'ai essayé l'approche de contournement. J'ai installé Visual Studio 2015 prévisualiser et créer une nouvelle application vierge avec xamarin le projet de formulaires.
  • quand j'ai ajouté un nouveau fichier Xaml tout était OK et la méthode InitialComponent a disparu.
  • Je ne sais pas exactement où est la raison du problème, mais il semble être un problème autour des paramètres de configuration.
2
répondu Tomas Repka 2015-03-16 10:33:50

Un Nettoyage et de reconstruction a fait l'affaire pour moi!

2
répondu machie27 2015-08-06 12:03:55

clic droit *.XAML et cliquez sur Propriétés,et changez la valeur" outil personnalisé " en "MSBuild: UpdateDesignTimeXaml", puis changez les propriétés" action de construction " en ressource intégrée"" ", projet de construction d'œuvres.

2
répondu Ali Yousefie 2016-07-14 10:01:36

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 aidera quelqu'un.

2
répondu Samir Tamri 2016-12-17 18:17:30

ce problème apparaît lorsque les projets de solution font référence à la version 1.4.0.0 du dlls" Xamarin.Forme.De Base", "Xamarin.Forme.Xaml " et " Xamarin.Forme.Plate-forme " version 1.0.0.0.

pour le résoudre, j'ai dû passer à la version 1.3.3.0 du dlls mais avec cette version Xamarin.Forme.Plate-forme 1.0.0.0 n'existe pas.

1
répondu Pulcker 2015-08-20 23:58:38

vérifier la version de Xamarin.La trousse de formulaires mentionnée dans votre projet.

.csproj file Xamarin.Forms nuget package

1
répondu user1412699 2016-11-15 22:35:28

j'ai eu le même problème de temps en temps, et c'est ce que j'ai fait pour le corriger: quand dans le projet PCL, j'ajoute une nouvelle page XAML multiplateforme au projet. Ajouter une nouvelle page XAML prend quelques secondes pour les références à "hook". Une fois que la nouvelle page XAML est ajoutée au projet, les soulignements rouges sur les Pages XAML (avec les problèmes) seront effacés. Une fois le problème résolu, je supprime simplement le fichier XAML que je viens d'ajouter. - Donc, en résumé, ajouter un nouvelle page XAML puis la supprimer a été la résolution du problème pour moi.

1
répondu zinczinc 2017-01-06 20:47:05

je Viens de mis à jour Tous les paquets , fonctionne très bien.

1
répondu Arun Prasad E S 2017-05-18 10:02:50

changer les propriétés de la Page en:

BuildAction => Embedded resource 
CustomTools => MSBuild:UpdateDesignTimeXaml
1
répondu Hamza 2018-05-01 05:19:31

j'ai eu un problème de cache quand j'ai rencontré cette erreur.

pour obtenir cette correction, il suffit de désinstaller dernière version de Xamarin.Formulaires paquet et réinstaller une version de travail précédente.

lorsque la reconstruction est réussie, puis mettre à jour le paquet à nouveau à la dernière version.

1
répondu Ali Yousefie 2018-05-24 01:04:48

dans mon cas, le problème était le chemin du projet. Le fichier de code généré obtient un nom incluant le chemin absolu encodé 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 compilation était "Project.Droid.D_.Projekt_C_. Espace de noms etc." Déplacer le projet vers un chemin comme "D:\project\ProjectRootFolder" aidé dans mon cas.

0
répondu Denis Reichelt 2016-08-01 10:33:22

j'utilise Visual Studio 2015, j'ai eu le même problème, et j'ai trouvé aucune des réponses sur le net était une solution complète. Je vais vous expliquer ce qui a marché pour moi.

mon but principal ici était d'éliminer le message d'erreur rouge qui n'arrêtait pas d'apparaître

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 utilisé qu'à la place, j'ai littéralement copié le code pour InitializeComponent() . Fait le travail.

il 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));
}

mettez la fonction dans la définition de chacune de vos pages ( .cs fichiers) e.g.

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));
    }
}

vous devez Aussi mettre using Xamarin.Forms.Xaml; en haut de chaque .cs page où LoadFromXaml(..) est utilisé.

et puis, bien sûr, changer InitializeComponent() en InitializeComponent2() pour appeler la nouvelle fonction. c'est-à-dire que vous avez placé la fonction dans le même contexte que la page faisant disparaître l'erreur. Je ne peux pas imaginer que la vraie InitializeComponent fonction aura quelque chose ajouté à elle que vous modifiez votre projet, mais c'est une possibilité. Ça a été 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, chercher le paquet NuGet mettre.

Visual Studio a compilé et exécuté le programme correctement sur mon appareil android + émulateur, mais ce message d'erreur ne disparaîtrait pas. Ma solution est pour Android, mais il peut aussi travailler pour iOS etc.

je suis retourné à la racine du problème InitializeComponent() le code réel pour 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) seulement généré lorsqu'un certain événement est déclenché. J'ai eu la chance de découvrir il en tapant du texte dans "Custom Tool Namespace", qui a déclenché cet événement , pour une des pages xaml(un fichier se terminant par .xaml , et non .cs - assurez-vous que vous avez sélectionné le fichier .xaml ), tapez du texte et appuyez sur Entrée et le fichier sera créé.

alors j'ai eu la grande idée de faire InitializeComponent2() , une fonction exactement comme InitializeComponent() et de la mettre dans chaque fichier cs afin qu'il existe sans avoir à générer les .xaml.g.cs chaque fois que vous voulez l'erreur disparaître.

0
répondu Dougie 2017-06-08 19:28:25

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

parfois contrôle de version source, tente d'identifier quel type de fichier est et ajouter ce genre de choses.

0
répondu Miguel Laborde 2017-06-08 19:29:27

ajouter using Xamarin.Forms.Xaml

testé sur Visual Studio 2017

0
répondu TheFranzMaster 2017-12-07 09:15:52
  1. sélectionnez les fichiers App.xaml et MainPage.xaml de la classe dans laquelle le problème est présent.
  2. clic droit et sélectionnez Propriétés.
  3. dans Build action sélectionnez "Embedded Resource"
  4. dans le type D'outil personnalisé " MSBuild:UpdateDesignTimeXaml "
  5. Propre et Construire et il a disparu.
0
répondu Endrit 2018-04-19 22:31:45

solution ultime serait d'éditer le dossier de projet dans un éditeur de texte et juste copier le modèle d'un autre dossier non-conflictuel. Cette solution a fonctionné pour moi. Habituellement, vous cherchez cette syntaxe:

<Compile Update="Your\Path\YourContentPage.xaml.cs">
  <DependentUpon>YourContentPage.xaml</DependentUpon>
</Compile>
0
répondu mr5 2018-05-01 03:07:01

dans la page XAML

Build Action = Embedded resource

Il fonctionne dans visual studio 2017.

0
répondu saleem kalro 2018-05-20 17:05:41

a essayé tout ce qui précède et pas de chance, ce qui a fonctionné pour moi était de force réinstaller le Xamarin.Paquets de formulaires.

mise à jour-paquet xamarin.formulaires-réinstaller

il ne met pas à jour les paquets, il supprime et ajoute simplement

0
répondu 2018-05-23 11:04:57

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
répondu Jannie Theunissen 2018-08-15 11:44:23