wake-up-neo.com

Xamarin.Forms - InitializeComponent ist beim Erstellen einer neuen Seite nicht vorhanden

Ich benutze Visual Studio, um Xamarin.Forms auszuprobieren. Ich versuche, die Anleitung zu befolgen: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/xaml-for-xamarin-forms/getting_started_with_xaml/

Kurz gesagt, ich erstelle eine Xamarin.Forms-Lösung mit einer PCL und versuche dann, dem PCL-Projekt einen Forms XAML Page hinzuzufügen.

Der Code-Behind, der erstellt wird, sieht folgendermaßen aus:

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

Das Problem hier ist, dass InitializeComponent(); rot ist ..__ Wenn ich versuche zu bauen, werde ich informiert, dass The name 'InitializeComponent' does not exist in the current context 

Ich habe mich nach Lösungen umgesehen und auch wenn andere das gleiche Problem hatten, funktionieren ihre Lösungen nicht für mich. Hier ist ein Vorschlag, den ich verwenden wollte: http://blog.falafel.com/xamarin-error-initializecomponent-does-not-exist-in-the-current-context/

Bitte lassen Sie mich wissen, wenn Sie eine Lösung für dieses Problem haben. Vielen Dank!

Aktualisieren:

Meine PCL (wo ich auch meine XAML-Seite hinzufügen möchte) enthält:

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

Und meine XAML-Seite:

<?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: Dieser Fehler tritt normalerweise nicht in VS 2015 auf. Wenn dies der Fall ist, ist hier meine ursprüngliche Antwort:

Die Lösung gefunden! Klicken Sie mit der rechten Maustaste auf die .XAML-Datei und wählen Sie Properties.

Sie sehen eine Eigenschaft mit dem Namen Custom Tool. Ändern Sie den Wert von MSBuild:Compile in MSBuild:UpdateDesignTimeXaml.

Das wird das Problem lösen ... Sie wissen nicht über die Downvote, aber hier ist mein Screenshot:

 Screenshot UPDATE:

Es erscheint selten wieder. Wenn dies der Fall ist, öffnen Sie einfach das Xaml und den Code hinter den Dateien und speichern Sie sie. Ich weiß, es ist nicht die beste Lösung, aber die Arbeit wird erledigt.

54
Dushyant Bangal

Was meine Beobachtung betrifft, sind in Visual Studio 2015 die XAML-Eigenschaften bereits standardmäßig so festgelegt, wie dies in den Antworten mit hoher Stimmenzahl vorgeschlagen wird. Insbesondere gilt Folgendes:

  • Benutzerdefiniertes Tool = MSBuild:UpdateDesignTimeXaml
  • Build Action = Embedded Resource

aber der Fehler tritt manchmal immer noch auf ... (wie in diese andere Frage ).

Bearbeiten Sie die entsprechende XAML-Datei und klicken Sie dann auf CTRL+S sollte gut funktionieren, aber das musst du nicht. Eine einfachere Möglichkeit, die Ausführung von benutzerdefinierten Tools zu erzwingen, besteht darin, mit der rechten Maustaste auf die XAML-Datei zu klicken und dann auf das Kontextmenü "Benutzerdefiniertes Tool ausführen" zu klicken.

enter image description here

30
har07

Ich bekomme das manchmal und hier ist die Checkliste, die sie bisher gelöst hat:

  1. Stellen Sie sicher, dass der Namespace in .xaml und .xaml.cs übereinstimmt

  2. Vom richtigen übergeordneten Element übernehmen - ContentPage für eine Seite und ContentView für ein Steuerelement

  3. Setzen Sie die Erstellungsaktion der .xaml-Datei auf Embedded Resource, wenn Sie sich im freigegebenen Projekt befinden.

28
root

Ich habe dieses Problem getroffen. Dies hängt mit der Kodierung von XAML-Dateien in VS zusammen. Ich verwende VS2015. 

Ich habe dieses Problem wie folgt gelöst:

  1. Öffnen Sie die * .xaml-Datei im Projekt und klicken Sie auf die Schaltfläche Speichern. (In VS2015 wird die korrekte Kodierung angewendet).

  2. Öffnen Sie dann das Projekt erneut und erstellen Sie es neu. Nun gibt es keine Fehler.

12
Roman Himadinov

Die Aktualisierung des Xamarin.Forms NuGet-Pakets sollte die Aufgabe erfüllen

10
Thomas Weller

Dies ist wahrscheinlich nicht Ihr Fall, aber ich hatte ein ähnliches Problem und mein Name war xaml und Code hinter dem Namen Missmatching. Beispiel: Wenn der Code hinter dem Namespace XamaTest ist (in den meisten Fällen der Name Ihrer App) und die Klasse MyXamlPage heißt, muss der Name der Xaml-Klasse XamaTest.MyXamlPage ([Namespace]. [Klassenname]) sein.

Ich war dumm, nachdem ich ein leeres xaml mit hinterlegtem Code erstellt hatte. Ich änderte den Namen der Klasse in xaml und erhielt diese Fehlermeldung. 

<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

Versuchen Sie, ax: Name = "..." auf der xaml-Seite hinzuzufügen ... Nichts anderes hat für mich funktioniert - aber nachdem Sie das x: Name-Attribut in einigen der Elemente auf der Seite hinzugefügt haben, verschwand der Fehler (meistens - ich bekomme es immer noch manchmal). Ich verwende den neuesten Build (1.5.0.6447) von Xamarin.Forms ...

XAML funktioniert nicht bei gemeinsam genutzten Projekten - es funktioniert nur bei tragbaren Projekten ...

4
Kim Rasmussen

Wenn Sie Intellisense-Fehler wie InitializeComponent in Ihren Xamarin.Forms-Seiten erhalten, das Projekt jedoch tatsächlich erstellt und ausgeführt wird, fügen Sie einfach eine neue Formularseite mit dem Assistenten hinzu, um alle Fehler zu beheben.

Dann können Sie die neue Seite löschen.

3

Ich bin auf diesen Fehler gestoßen, als;

  1. Ich habe einen ContentPage-cs+xaml und den App-cs+xaml aus dem Projekt entfernt, ohne es tatsächlich zu löschen. 
  2. Fügen Sie diese erneut in einem anderen Ordner zum Projekt hinzu.

Dies wurde behoben durch;

  1. Wählen Sie die .xaml-Datei der Klasse aus, in der das Problem vorliegt.
  2. Klicken Sie mit der rechten Maustaste und wählen Sie properties.
  3. In Build action "Embedded Resource" auswählen
  4. In Custom Tool geben Sie "MSBuild: UpdateDesignTimeXaml" ein.
  5. Clean and Build und es war weg.
3
7vikram7

Überprüfen Sie den Seitentext x:Class="AppName.Page1". AppName muss Ihr App-Name sein

3
developer d

Es sieht so aus, als ob die (erneute) Generierung der blah.xaml.g.cs-Dateien tatsächlich das Problem ist. Ich bekomme eine Menge in gemeinsamen Projekten (weshalb ich sie nicht verwende, es sei denn, ich habe keine andere Wahl). In Xamarin Studio passiert das aus irgendeinem Grund für mich viel mehr als für Visual Studio. Ich versuche, XS überhaupt nicht zu verwenden.

Wenn Sie häufig eine der anderen Plattformen entladen (z. B. wenn Sie Droiden bauen oder ios entladen) und ein Bereinigen und Wiederherstellen durchführen, wird dies behoben. 

Sie können auch versuchen, etwas zu tun, z. B. eine der anstößigen .xaml-Dateien zu öffnen und einige der xaml-Markups zu ändern (z. B. Hinzufügen oder Ändern eines x:Name zu einem der Steuerelemente oder Ansichten). Dadurch wird die Datei xaml.g.cs regeneriert, und das Problem wird (zumindest für mich) normalerweise gelöst.

Das sollte wirklich nichts sein. 

3
wislon

Klicken Sie mit der rechten Maustaste auf * .xaml, und klicken Sie auf Eigenschaften. Ändern Sie den Wert für "Custom Tool" in "MSBuild: UpdateDesignTimeXaml". Ändern Sie als Nächstes die Eigenschaften von "Build Action" in " Embedded Resource ".

2
Ali Yousefie

Ein sauberer und neuer Aufbau hat den Trick für mich gemacht!

2
machie27
  • Ich hatte ein ähnliches Problem in der Visual Studio 2013 Update 4-Umgebung und versuchte alle Empfehlungen, die ich im Web gefunden hatte. Nichts hat mein Problem gelöst. 
  • Dann versuchte ich einen Workaround-Ansatz. Ich habe Visual Studio 2015 preview installiert und eine neue leere App mit dem Projekt " xamarin forms" erstellt. 
  • Als ich eine neue Xaml-Datei hinzufügte, war alles in Ordnung und das Problem mit der InitialComponent-Methode verschwand. 
  • Ich weiß nicht, wo genau der Grund des Problems liegt, aber es scheint ein Problem bei den Konfigurationseinstellungen zu sein.
2
Tomas Repka

Sehr einfache Lösung, die für mich funktioniert hat:

  • Kopieren Sie den Inhalt der XAML/CS-Datei
  • Löschen Sie die XAML/CS-Datei
  • Erstellen Sie eine neue Klasse und fügen Sie den Inhalt ein

Die Funktion InitializeComponent () erscheint jetzt ohne rote Unterstreichung.

Hoffe das hilft jemandem.

2
Samir Tamri

Dieses Problem tritt auf, wenn die Projekte der Lösung auf die Version 1.4.0.0 der DLLs "Xamarin.Forms.Core", "Xamarin.Forms.Xaml" und "Xamarin.Forms.Platform" Version 1.0.0.0 verweisen.

Um das Problem zu lösen, musste ich auf Version 1.3.3.0 der DLLs downgraden, aber mit dieser Version ist Xamarin.Forms.Platform 1.0.0.0 nicht vorhanden.

1
Pulcker

Ich hatte ein Problem mit der Zwischenspeicherung, als ich auf diesen Fehler stieß.

Um dieses Problem zu beheben, einfach uninstall letzte Version des Xamarin.Forms-Pakets und erneut installieren einer vorherigen Arbeitsversion.

Wenn die Neuerstellung erfolgreich ist, dann update das Paket erneut auf die neueste Version.

1
Ali Yousefie

Überprüfen Sie den Klassennamen richtig.

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

Der Klassenname sollte eine Kombination aus App-Name und Teilklassennamen sein

Ich habe ab und zu dasselbe Problem, und das habe ich getan, um das Problem zu beheben: Wenn ich im PCL-Projekt bin, füge ich dem Projekt eine neue plattformübergreifende XAML-Seite hinzu. Das Hinzufügen einer neuen XAML-Seite dauert einige Sekunden für die Verweise auf "Hook". Nachdem die neue XAML-Seite erfolgreich zum Projekt hinzugefügt wurde, werden die roten Unterstreichungen auf den XAML-Seiten (mit Problemen) gelöscht. Sobald das Problem gelöst ist, lösche ich einfach die soeben hinzugefügte XAML-Datei. Zusammenfassend gesagt, das Hinzufügen einer neuen XAML-Seite und das Löschen dieser Seite hat das Problem für mich gelöst.

1
zinczinc

Ich habe gerade Alle Pakete aktualisiert , funktioniert gut.

1
Arun Prasad E S

Überprüfen Sie die Version des Xamarin.Forms-Pakets, auf das in Ihrem Projekt verwiesen wird.

 .csproj file  Xamarin.Forms nuget package

1
user1412699

Ändern Sie die Seiteneigenschaften in:

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

Ich weiß nicht, ob das gelöst ist, aber für mich musste ich nur die erste Zeile der XAML entfernen ("xml version =" 1.0 "coding =" utf-8 ").

Manchmal versucht die Versionskontrolle in der Quelle herauszufinden, welche Art von Datei es ist, und diese Art von Material hinzuzufügen.

0
Miguel Laborde

Es hat den Anschein, dass dies auf viele Dinge zurückzuführen ist. Wenn Sie alle diese Informationen gelesen haben und noch nicht gelöst haben:

Meine wurde durch die Einstellung von Solution Configuration auf Release verursacht. Geändert zu Debug und Fehler behoben.

0
Phil P

In meinem Fall war das Problem der Projektpfad . Die generierte Codedatei erhält einen Namen einschließlich des absoluten Pfads, der für einen gültigen Dateinamen kodiert ist. Der Pfad war "D:\Projekt C #\ProjectRootFolder\Project" . Der vom Build-Tool generierte Dateiname war "Project.Droid.D_.Projekt_C_. Namespace etc." Verschieben des Projekts in eine Pfad wie "D:\Projekt\ProjectRootFolder" hat in meinem Fall geholfen.

0
Denis Reichelt

Die ultimative Lösung wäre, die Projektdatei in einem Texteditor zu bearbeiten und das Muster einfach aus einer anderen Datei ohne Konflikt zu kopieren. Diese Lösung hat für mich funktioniert. Normalerweise würden Sie nach dieser Syntax suchen:

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

Mir fehlte ein bestimmtes Referenzattribut (in meinem Fall util) im Stammelement:

<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
  1. Wählen Sie die Datei App.xaml und MainPage.xaml der Klasse aus, in der das Problem vorliegt.
  2. Klicken Sie mit der rechten Maustaste und wählen Sie Eigenschaften aus.
  3. Wählen Sie in der Build-Aktion "Embedded Resource" aus.
  4. Geben Sie im benutzerdefinierten Tool "MSBuild:UpdateDesignTimeXaml" ein.
  5. Clean and Build und es war weg.
0
Endrit

Ich hatte das gleiche Problem mit der VS Community Edition 2019, ich habe gerade die Regenerate-Lösung verwendet und das Problem wurde behoben

using Xamarin.Forms.Xaml hinzufügen

getestet auf Visual Studio 2017

0
TheFranzMaster

Ich verwende Visual Studio 2015, ich hatte das gleiche Problem und fand, dass keine der Antworten im Internet eine vollständige Lösung war ... Hier erkläre ich, was für mich funktioniert.

Mein Hauptziel war es, die rote Fehlermeldung, die immer wieder auftauchte, zu beseitigen 

Der Name InitializeComponent ist im aktuellen Kontext nicht vorhanden

Im Grunde habe ich eine Funktion namens InitializeComponent2() erstellt, die genau dasselbe tut wie InitializeComponent(), und stattdessen habe ich den Code für InitializeComponent()..__ buchstäblich kopiert. Erledigt den Job.

Es sieht so aus (und ich werde es erklären):

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

Setzen Sie die Funktion in die Definition jeder Ihrer Seiten (.cs -Dateien), z.

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

Außerdem müssen Sie using Xamarin.Forms.Xaml; oben auf jeder .cs-Seite Einfügen, auf der LoadFromXaml(..) verwendet wird.

Und dann ändern Sie InitializeComponent() natürlich in InitializeComponent2(), um die neue Funktion aufzurufen . Sie haben die Funktion in den gleichen Kontext gestellt wie die Seite, die den Fehler beseitigt. Ich kann mir nicht vorstellen, dass die reale InitializeComponent-Funktion etwas hinzugefügt wird, wenn Sie Ihr Projekt modifizieren, aber das ist eine Möglichkeit . Das war bisher gut für mich.

Ich habe viele Dinge ausprobiert, die Build-Aktion, den XAML-Namespace geändert, vs neu gestartet, gereinigt + neu erstellt und nach NuGet-Paketaktualisierungen gesucht.

Grundsätzlich hat Visual Studio das Programm auf meinem Android-Gerät + Emulator kompiliert und ausgeführt, aber diese Fehlermeldung würde nicht verschwinden. Meine Lösung ist für Android, aber sie funktioniert möglicherweise auch für iOS usw.

Ich bin an die Wurzel des Problems zurückgekehrt. InitializeComponent() Der eigentliche Code für diese Funktion wird beispielsweise in einer Datei namens <Your Project Name>.Page1.xaml.g.cs oder Page2.xaml.g.cs generiert. Es (die Datei) wird jedoch nur generiert, wenn ein bestimmtes Ereignis ausgelöst wird. Ich hatte das Glück, __.it zu entdecken, indem ich für eine der XAML-Seiten Text in "Custom Tool Namespace" eingegeben habe, der das Ereignis ausgelöst hat (eine Datei, die auf .xaml, nicht .cs endet - stellen Sie sicher, Sie haben .xaml Datei ausgewählt), geben Sie etwas Text ein und drücken Sie die Eingabetaste. Die Datei wird erstellt.

Dann hatte ich die großartige Idee, InitializeComponent2(), eine Funktion genau wie InitializeComponent(), zu erstellen und sie in jede cs-Datei zu schreiben, damit sie existiert , Ohne dass Sie jedes Mal den .xaml.g.cs generieren müssen, wenn Sie den Fehler Geh weg.

0
Dougie

Nur in Xaml-Seiteneigenschaften festlegen
Build Action = Embedded resource
Es funktioniert im Visual Studio 2017.

0
saleem kalro

Ich habe alles ausprobiert und kein Glück. Was für mich funktionierte, war die erneute Installation der Xamarin.Forms-Pakete. In der Paket-Manager-Konsole Eingabeaufforderung;

update-Paket xamarin.forms -reinstall

Es werden keine Pakete aktualisiert, sondern nur entfernt und erneut hinzugefügt

0
user755404