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();
}
}
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:
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.
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:
MSBuild:UpdateDesignTimeXaml
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.
Ich bekomme das manchmal und hier ist die Checkliste, die sie bisher gelöst hat:
Stellen Sie sicher, dass der Namespace in .xaml und .xaml.cs übereinstimmt
Vom richtigen übergeordneten Element übernehmen - ContentPage für eine Seite und ContentView für ein Steuerelement
Setzen Sie die Erstellungsaktion der .xaml-Datei auf Embedded Resource
, wenn Sie sich im freigegebenen Projekt befinden.
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:
Öffnen Sie die * .xaml-Datei im Projekt und klicken Sie auf die Schaltfläche Speichern. (In VS2015 wird die korrekte Kodierung angewendet).
Öffnen Sie dann das Projekt erneut und erstellen Sie es neu. Nun gibt es keine Fehler.
Die Aktualisierung des Xamarin.Forms NuGet-Pakets sollte die Aufgabe erfüllen
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
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 ...
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.
Ich bin auf diesen Fehler gestoßen, als;
ContentPage-cs+xaml
und den App-cs+xaml
aus dem Projekt entfernt, ohne es tatsächlich zu löschen. Dies wurde behoben durch;
.xaml
-Datei der Klasse aus, in der das Problem vorliegt.properties
.Build action
"Embedded Resource" auswählenCustom Tool
geben Sie "MSBuild: UpdateDesignTimeXaml" ein.Überprüfen Sie den Seitentext x:Class="AppName.Page1"
. AppName muss Ihr App-Name sein
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.
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 ".
Ein sauberer und neuer Aufbau hat den Trick für mich gemacht!
Visual Studio 2013
Update 4-Umgebung und versuchte alle Empfehlungen, die ich im Web gefunden hatte. Nichts hat mein Problem gelöst. Visual Studio 2015
preview installiert und eine neue leere App mit dem Projekt " xamarin forms" erstellt. Xaml
-Datei hinzufügte, war alles in Ordnung und das Problem mit der InitialComponent
-Methode verschwand. Sehr einfache Lösung, die für mich funktioniert hat:
Die Funktion InitializeComponent () erscheint jetzt ohne rote Unterstreichung.
Hoffe das hilft jemandem.
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.
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.
Ü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.
Ich habe gerade Alle Pakete aktualisiert , funktioniert gut.
Ändern Sie die Seiteneigenschaften in:
BuildAction => Embedded resource
CustomTools => MSBuild:UpdateDesignTimeXaml
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.
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.
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.
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>
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"
>
App.xaml
und MainPage.xaml
der Klasse aus, in der das Problem vorliegt.MSBuild:UpdateDesignTimeXaml
" ein.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
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.
Nur in Xaml-Seiteneigenschaften festlegenBuild Action = Embedded resource
Es funktioniert im Visual Studio 2017.
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