Имя «InitializeComponent» не существует в текущем контексте при создании нового файла xaml.

Я искал ответ на этот вопрос некоторое время, поэтому я надеюсь, что мой случай может быть решен. Я создал новые общие проекты Xamarin.Forms в сообществе Visual Studio 2015. Я создал новый файл xaml и назвал его LoginPage и поместил его в папку с именем Pages в общем проекте приложения. После добавления пространства имен Xamarin.Forms для распознавания Page и удаления этого перед InitializeComponent у меня есть это:

using Xamarin.Forms;

namespace BeneFit.Pages
{

    public sealed partial class LoginPage : Page
    {
        public LoginPage()
        {
        InitializeComponent(); //This has the red squiggly
        }
    }
}

Файл Xaml здесь вообще не изменился:

<Page
    x:Class="BeneFit.Pages.LoginPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:BeneFit.Pages"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    </Grid>
</Page>

Одна вещь, которую я часто замечаю, это то, что действие сборки должно быть Page, что я и сделал в этом случае. Также было предложено быстрое исправление, чтобы добавить это:

    private void InitializeComponent()
    {
        throw new NotImplementedException();
    }

что на самом деле не решает проблему, потому что я знаю, что должен это сделать. Любая помощь или предложения будут огромными, я пытался справиться с этим некоторое время.


person Dallas Phillips    schedule 27.01.2016    source источник


Ответы (4)


Когда вы создаете новый элемент управления или страницу в XAML, за кулисами также создается скрытый частичный файл класса, который содержит ваш метод InitializeComponent(). В случае страницы с именем LoginPage сгенерированный код будет называться LoginPage.g.i.cs и должен находиться в структурах папок в папке obj.

Ваша строка XAML

xmlns:local="using:BeneFit.Pages"

выглядит немного странно, я бы изменил это на

xmlns:local="clr-namespace:BeneFit.Pages"
person slugster    schedule 27.01.2016
comment
Хорошо, я нашел LoginPage.g.cs, который был единственным другим файлом. Я до сих пор не понимаю, почему метод InitializeComponent() до сих пор не существует. Я новичок в С#, поэтому я все еще изучаю эти концепции. - person Dallas Phillips; 28.01.2016
comment
@DallasPhillips Эта конкретная проблема обычно возникает, если вы перемещаете файл в файловой системе или меняете пространство имен после создания файла. - person slugster; 28.01.2016
comment
Я никогда не перемещал/переименовывал файлы. Код, который я показал, был из новых файлов. Должен ли я удалить их и создать новые. - person Dallas Phillips; 28.01.2016
comment
@ Даллас, вы не ошибетесь, воссоздав их. Также убедитесь, что ваша папка /obj не находится под управлением исходного кода или только для чтения, и убедитесь, что вы протестировали упомянутое мной изменение пространства имен. - person slugster; 28.01.2016

Перейдите в каждую папку проекта (общую, .Android, .ios и т. д.) и удалите папки obj и bin (это удалит скрытый частичный файл .g)

Восстановите решение.

person Savindya A    schedule 20.11.2017

Три проверки для выполнения:

1 — Последние версии Xamarin Forms nuget установили одинаковые версии для всех платформ.

2 - Для свойств page.Xaml:

   Build Action: Embedded Resource
   Copy to output dir: Do not copy
   Custom tool (most common error when created page manually): MSBuild:UpdateDesignTimeXaml

Для свойств page.cs:

Build action: Compile
Copy to output dir: Do not copy

3 - Щелкните проект правой кнопкой мыши - Выгрузите проект, затем перезагрузите проект.

person Nick Kovalsky    schedule 20.11.2017

Это похоже на UWP XAML, а не на Xamarin Forms XAML.

Вы создаете неправильную новую вещь?

Вы должны создать новую страницу содержимого Xamarin.Forms.

введите здесь описание изображения

person Steve Chadbourne    schedule 20.11.2017