Подтвердить что ты не робот

Xamarin.Forms - InitializeComponent не существует при создании новой страницы

Я использую Visual Studio для тестирования Xamarin.Forms. Я пытаюсь следовать за гидом: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/xaml-for-xamarin-forms/getting_started_with_xaml/

Короче, я создаю решение Xamarin.Forms с помощью PCL, а затем попытаюсь добавить Forms XAML Page в проект PCL.

Созданный код выглядит так:

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

Проблема здесь в том, что InitializeComponent(); является красным. Когда я пытаюсь построить, я узнаю, что The name 'InitializeComponent' does not exist in the current context

Я искал решения, и хотя у других были такие же проблемы, их решения не будут работать для меня. Вот одно предложение, которое я пытался использовать: http://blog.falafel.com/xamarin-error-initializecomponent-does-not-exist-in-the-current-context/

Пожалуйста, дайте мне знать, если у вас есть решение этой проблемы. Спасибо!

Update:

Мой PCL (где я также хочу добавить мою страницу XAML) содержит:

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

И моя 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-за:

 
    public partial class MyXamlPage : ContentPage
    {
        public MyXamlPage()
        {
            InitializeComponent();
        }
    }
4b9b3361

Ответ 1

UPDATE: Эта ошибка обычно не появляется в VS 2015, если это так, здесь мой оригинальный ответ:

Нашел решение! Щелкните правой кнопкой мыши на файле .XAML, выберите Свойства.

Вы увидите свойство под названием Пользовательский инструмент. Измените его значение от MSBuild:Compile до MSBuild:UpdateDesignTimeXaml

Это решит проблему. Не знаю о нисходящем, но вот мой скриншот:

Снимок экрана UPDATE:

Он появляется редко. Если это так, просто откройте файл Xaml и код за файлами и сохраните их. Я знаю, это не лучшее решение, но оно выполняет свою работу.

Ответ 2

Я получаю это иногда и здесь контрольный список, который их решил до сих пор:

  • Убедитесь, что пространство имен в .xaml и .xaml.cs соответствует

  • Наследовать от правильного родителя - ContentPage для страницы и ContentView для элемента управления

  • Установите действие сборки файла .xaml на Embedded Resource, если в общем проекте.

Ответ 3

Что касается моего наблюдения, то в Visual Studio 2015 свойства XAML уже заданы, как предложено здесь с высоким разрешением, в частности:

  • Пользовательский инструмент = MSBuild:UpdateDesignTimeXaml
  • Действие сборки = Embedded Resource

но ошибка все же иногда появляется... (например, в этот другой вопрос).

Редактирование соответствующего файла XAML, а затем нажмите CTRL + S, должно работать нормально, но вам не нужно. Более чистый способ принудительного запуска пользовательских инструментов - это щелкнуть правой кнопкой мыши по файлу XAML и затем щелкнуть по контекстному меню "Запустить пользовательский инструмент".

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

Ответ 4

Я столкнулся с этой проблемой. Это связано с кодированием файлов XAML в VS. Я использую VS2015.

Я решил эту проблему следующим образом:

  • Откройте файл *.xaml в проекте и нажмите кнопку "Сохранить". (Будет применено правильное кодирование в VS2015).

  • Затем заново откройте проект и перестройте его. Теперь ошибок нет.

Ответ 5

Обновление пакета NuGet Xamarin.Forms должно сделать всю работу

Ответ 6

Вероятно, это не ваш случай, но у меня была похожая проблема, и у меня был xaml и код несоответствия имен. например по вашему образцу, если код за пространством имен - XamaTest (имя вашего приложения в большинстве случаев), а класс называется MyXamlPage, ваше имя класса xaml должно быть XamaTest.MyXamlPage([пространство имен]. [имя класса])

Я был глупым после создания пустого xaml с кодом позади, я изменил имя класса в xaml, и я получил эту ошибку.

<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-за:

public partial class MyXamlPage : ContentPage

Ответ 7

Попробуйте добавить ax: Name= "..." на странице xaml... Для меня ничего не сработало - но после добавления атрибута x: Name на некоторые элементы на странице ошибка исчезла (большая часть времена - я все еще получаю это иногда). Я использую последнюю версию (1.5.0.6447) Xamarin.Forms...

XAML не работает в общих проектах - он работает только в портативных проектах...

Ответ 8

Похоже, что генерация файлов blah.xaml.g.cs (re) на самом деле является проблемой. Я получаю это в общих проектах (поэтому я их не использую, если у меня нет другого выбора). Это происходит в Xamarin Studio больше, чем Visual Studio, по какой-то причине. Я стараюсь вообще не использовать XS.

Часто выгружайте одну из других платформ (например, если вы строите дроид, выгружаете ios), а чистая и перестроенная система будет исправлена.

Вы также можете попробовать сделать что-то вроде открытия одного из оскорбительных файлов .xaml и изменения некоторой разметки xaml (например, добавления или изменения x:Name к одному из элементов управления или представлений). Это заставит регенерировать файл xaml.g.cs, и (по крайней мере для меня) обычно решает проблему.

Это действительно не должно быть чем-то.

Ответ 9

Я столкнулся с этой ошибкой, когда:

  • Я удалил ContentPage-cs+xaml и App-cs+xaml из проекта, не удалив его.
  • Повторно добавили их в проект в другой папке.

Это было исправлено:

  • Выберите файл .xaml класса, в котором присутствует проблема.
  • Щелкните правой кнопкой мыши и выберите properties.
  • В Build action выберите "Встроенный ресурс"
  • В Custom Tool введите "MSBuild: UpdateDesignTimeXaml"
  • Очистить и скомпоновать, и он исчез.

Ответ 10

Если вы получаете ошибки Intellisense, такие как InitializeComponent на ваших страницах Xamarin.Forms, но проект действительно строит и работает нормально, просто добавьте новую страницу Forms с помощью мастера, чтобы исправить все ошибки...

Затем вы можете удалить эту новую страницу.

Ответ 11

Проверить текст страницы x:Class="AppName.Page1". AppName должно быть вашим именем приложения

Ответ 12

  • У меня была схожая проблема в среде Visual Studio 2013 update 4, и я пробовал все рекомендации, которые я нашел в Интернете. Ничто не решило мою проблему.
  • Затем я пробовал обходной подход. Я установил предварительный просмотр Visual Studio 2015 и создаю новое пустое приложение с помощью проекта xamarin.
  • Когда я добавил новый файл Xaml, все было в порядке, и проблема с методом InitialComponent исчезла.
  • Я не знаю, где именно причина проблемы, но, похоже, проблема в настройках конфигурации.

Ответ 13

Чистый и перестроенный помогло!

Ответ 14

Щелкните правой кнопкой мыши *.xaml и щелкните свойства и измените значение "Пользовательский инструмент" на "MSBuild: UpdateDesignTimeXaml", затем измените свойства "Build Action" на " Embedded Resource", строить проектные работы.

Ответ 15

Очень простое решение, которое сработало для меня:

  • Копировать содержимое файла xaml/cs
  • Удалить файл xaml/cs
  • Создайте новый класс и вставьте содержимое

Теперь функция InitializeComponent() появляется без красной подчеркивания.

Надеюсь, это поможет кому-то.

Ответ 16

Эта проблема возникает, когда проекты решения ссылаются на версию 1.4.0.0 из dlls "Xamarin.Forms.Core", "Xamarin.Forms.Xaml" и "Xamarin.Forms.Platform" версии 1.0.0.0.

Чтобы решить эту проблему, мне пришлось перейти на версию 1.3.3.0 из DLL, но с этой версией Xamarin.Forms.Platform 1.0.0.0 не существует.

Ответ 17

Проверьте версию пакета Xamarin.Forms, упомянутую в вашем проекте.

. csproj file Xamarin.Forms nuget package

Ответ 18

У меня была такая же проблема и сейчас, и именно это я и делал, чтобы ее исправить: когда в проекте PCL я добавляю в проект новую кросс-платформенную страницу XAML. Добавление новой страницы XAML занимает несколько секунд для ссылок на "hook". После того, как новая страница XAML будет успешно добавлена ​​в проект, красные подчеркивания на страницах XAML (с проблемами) будут очищены. Как только проблема будет решена, я просто удалю только что добавленный файл XAML. - Итак, в итоге, добавив новую страницу XAML, тогда ее удаление решило проблему для меня.

Ответ 19

Я просто обновлен Все пакеты, отлично работает.

Ответ 20

У меня была проблема с кэшированием, когда я столкнулся с этой ошибкой.

Чтобы это исправить, просто удалите последнюю версию пакета Xamarin.Forms и переустановите предыдущую рабочую версию.

Если восстановление выполнено успешно, обновите пакет до последней версии.

Ответ 21

Измените свойства страницы на:

BuildAction => Embedded resource 
CustomTools => MSBuild:UpdateDesignTimeXaml

Ответ 22

Проверьте имя класса правильно.

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

Имя класса должно быть комбинацией имени приложения и частичного имени класса

Ответ 23

Я не знаю, разрешено ли это, но для меня единственное, что мне нужно было сделать, это удалить первую строку XAML ( "xml version =" 1.0 "encoding =" utf-8 ")

Иногда исходная версия управления версиями, пытается определить, какой тип файла и добавить этот тип материала.

Ответ 24

В моем случае проблема была в пути к проекту. Сгенерированный файл кода получает имя, включая абсолютный путь, закодированный, чтобы сделать его допустимым именем. Путь был "D:\Projekt С#\ProjectRootFolder\Project". Имя файла, созданного инструментом сборки, было "Project.Droid.D_.Projekt_C_. Пространство имен и т.д." Перемещение проекта на путь, подобный "D:\project\ProjectRootFolder", помогло мне в моем случае.

Ответ 25

В моем случае ссылка на пакет Xamarin.Forms NuGet исчезла (библиотеки Xamarin.Forms напрямую ссылались). Я только что добавил пакет NuGet в проект, чтобы исправить эту проблему.

Ответ 26

Я использую Visual Studio 2015, у меня такая же проблема, и я нашел, что ни один из ответов в сети не был полным решением. Здесь я объясню, что сработало для меня.

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

Имя InitializeComponent не существует в текущем контексте

В принципе, я создал функцию под названием InitializeComponent2(), которая делает то же самое, что и InitializeComponent(), и вместо этого я буквально скопировал код для InitializeComponent(). Работает ли.

Похоже на это (и я объясню):

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

Поместите функцию в определение каждой из ваших страниц (.cs), например.

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

Также вам нужно положить using Xamarin.Forms.Xaml; вверху каждой страницы .cs где используется LoadFromXaml(..).

И затем, конечно, измените InitializeComponent() на InitializeComponent2() для вызова новой функции. т.е. вы поместили функцию в тот же контекст, что и страница, в результате чего ошибка исчезла. Я не могу себе представить, что реальная функция InitializeComponent получит что-нибудь добавленное к ней при изменении вашего проекта, но это возможно. Это было хорошо для меня до сих пор.

Я пробовал много вещей, меняя действие сборки, пространство имен XAML, перезагружая vs, очищая + перестраивая, ища обновления пакетов NuGet.

В принципе, Visual Studio скомпилировала и отлично выполнила программу на моем эмуляторе Android +, но это сообщение об ошибке не исчезнет. Мое решение для Android, но оно также может работать и для iOS и т.д.

Я вернулся к корню проблемы InitializeComponent() Фактический код для этой функции генерируется, например, в файле с именем <Your Project Name>.Page1.xaml.g.cs или Page2.xaml.g.cs. Однако он (файл) является генерируется только при запуске определенного события. Мне посчастливилось открыть это, набрав текст в "Пользовательское пространство имен инструментов", которое произвело это событие для одной из страниц xaml (файл, заканчивающийся на .xaml, а не .cs), убедитесь, что вы выбрали файл .xaml), введите текст и нажмите "Enter", и файл будет создан.

Тогда у меня была отличная идея сделать InitializeComponent2(), функцию точно такую ​​же, как InitializeComponent(), и поместить ее в каждый файл cs, чтобы она существовала без необходимости генерировать .xaml.g.cs каждый раз, когда вы хотите, чтобы ошибка уходи.

Ответ 27

добавить using Xamarin.Forms.Xaml

протестирован на Visual Studio 2017

Ответ 28

  1. Выберите файл App.xaml и MainPage.xaml класса, в котором присутствует проблема.
  2. Щелкните правой кнопкой мыши и выберите свойства.
  3. В действии Build выберите "Embedded Resource"
  4. В пользовательском инструменте введите " MSBuild:UpdateDesignTimeXaml "
  5. Очистить и построить, и это ушло.

Ответ 29

Конечным решением было бы отредактировать файл проекта в текстовом редакторе и просто скопировать шаблон из другого неконфликтующего файла. Это решение сработало для меня. Обычно вы искали бы этот синтаксис:

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

Ответ 30

В свойствах страницы Xaml только установить
Build Action = Embedded resource
Работает в визуальной студии 2017.