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();
}
}
Ответы
Ответ 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.
Я решил эту проблему следующим образом:
Ответ 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, упомянутую в вашем проекте.
![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
- Выберите файл
App.xaml
и MainPage.xaml
класса, в котором присутствует проблема. - Щелкните правой кнопкой мыши и выберите свойства.
- В действии Build выберите "Embedded Resource"
- В пользовательском инструменте введите "
MSBuild:UpdateDesignTimeXaml
" - Очистить и построить, и это ушло.
Ответ 29
Конечным решением было бы отредактировать файл проекта в текстовом редакторе и просто скопировать шаблон из другого неконфликтующего файла. Это решение сработало для меня. Обычно вы искали бы этот синтаксис:
<Compile Update="Your\Path\YourContentPage.xaml.cs">
<DependentUpon>YourContentPage.xaml</DependentUpon>
</Compile>
Ответ 30
В свойствах страницы Xaml только установить
Build Action = Embedded resource
Работает в визуальной студии 2017.