Xamarin.Forms – 创build一个新页面时,InitializeComponent不存在

我正在使用Visual Studio来试用Xamarin.Forms。 我正在尝试遵循指南: http : //developer.xamarin.com/guides/cross-platform/xamarin-forms/xaml-for-xamarin-forms/getting_started_with_xaml/

简而言之,我使用PCL创build一个Xamarin.Forms解决scheme,然后尝试将一个Forms XAML Page添加到PCL项目中。

被创build的代码隐藏看起来像这样:

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

这里的问题是InitializeComponent(); 是红色的。 当我尝试构build时,我得到通知The name 'InitializeComponent' does not exist in the current context

我一直在寻找解决scheme,即使其他人也有同样的麻烦,他们的解决scheme不会为我工作。 以下是我尝试使用的一个build议: http : //blog.falafel.com/xamarin-error-initializecomponent-does-not-exist-in-the-current-context/

请让我知道,如果你有这个问题的解决scheme。 谢谢!

更新:

我的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> 

代码隐藏:

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

更新:这个错误通常不会出现在VS 2015中,如果是这样,这是我的原始答案:

find解决scheme! 右键单击.XAML文件,select属性

您将看到一个名为Custom Tool的属性。 从MSBuild:Compile更改它的值MSBuild:CompileMSBuild:UpdateDesignTimeXaml

这将解决问题。 不知道downvote,但这里是我的截图:

截图 更新:

它很less再出现。 如果是这样,只需打开Xaml和代码隐藏文件并保存。 我知道,这不是最好的解决scheme,但它完成了工作。

就我的观察而言,在Visual Studio 2015中,默认情况下,XAML属性已经被设置为高度投票答案的build议,具体来说:

  • 自定义工具= MSBuild:UpdateDesignTimeXaml
  • 构build行动= Embedded Resource

但错误仍然有时出现…(就像在这个其他问题 )。

编辑相应的XAML文件,然后按CTRL + S应该可以正常工作,但是你不需要。 强制自定义工具运行的更简单的方法是右键单击XAML文件,然后单击“运行自定义工具”上下文菜单。

在这里输入图像说明

我有时得到这个,这是目前解决它们的清单:

  1. 确保.xaml和.xaml.cs中的名称空间匹配

  2. inheritance正确的父级ContentPage的页面和ContentView控件

  3. 如果在共享项目中,将.xaml文件的生成操作设置为Embedded Resource

我遇到了这个问题。 它与VS中的XAML文件的编码相关联。 我正在使用VS2015。

我解决了这个问题如下:

  1. 打开项目中的* .xaml文件,然后单击保存button。 (将会在VS2015中应用正确的编码)。

  2. 然后重新打开项目并重build它。 现在没有错误。

更新Xamarin.Forms NuGet包应该做的工作。

尝试在xaml页面上添加ax:Name =“…”…对于我来说没有其他工作 – 但是在页面上的一些元素上添加了x:Name属性之后,错误消失了(大部分时间 – 我仍然有时得到它)。 我使用Xamarin.Forms的最新版本(1.5.0.6447)…

XAML不能在共享项目上工作 – 只能在便携式项目中使用…

这可能不是你的情况,但我有类似的问题,我的一个是xaml和代码名称mismatching背后。 例如根据你的示例,如果在命名空间后面的代码是XamaTest(在大多数情况下你的应用程序的名字),并且类叫做MyXamlPage,你的xaml类名必须是XamaTest.MyXamlPage([namespace]。[classname])

我创build了一个空的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> 

代码隐藏:

 public partial class MyXamlPage : ContentPage 

我遇到这个错误的时候;

  1. 我从项目中删除了一个ContentPage-cs+xamlApp-cs+xaml ,而没有实际删除它。
  2. 重新将这些添加到另一个文件夹中的项目。

这是固定的;

  1. select存在问题的类的.xaml文件。
  2. 右键单击并selectproperties
  3. Build actionselect“Embedded Resource”
  4. Custom Tooltypes“MSBuild:UpdateDesignTimeXaml”
  5. 清洁和build设,它已经走了。

干净和重build为我做了诡计!

看起来像blah.xaml.g.cs文件的(重新生成)实际上是问题。 我在共享的项目中得到了很多(这就是为什么我不使用它们,除非我没有别的select)。 Xamarin Studio比Visual Studio更适合我,因为某些原因。 我尽量不要使用XS。

经常卸载其他平台之一(例如,如果你正在build设的机器人,卸载ios),做一个干净的重build将修复它。

您也可以尝试执行诸如打开有问题的.xaml文件之一以及更改某些xaml标记(例如,将x:Name添加或更改为某个控件或视图)。 这将强制重新生成xaml.g.cs文件,并且(至less对我来说)通常可以解决这个问题。

这真的不应该是一件事情。

右键单击* .xaml并单击属性,将“Custom Tool”值更改为“MSBuild:UpdateDesignTimeXaml”,然后将“Build Action”属性更改为“ Embedded Resource ”,生成项目工程。

如果你在Xamarin.Forms页面中获得了这样的InitializeComponent的intellisense错误,但是这个项目实际上可以正常生成并运行正常,那么只需使用向导添加一个新的Forms页面来修复所有错误。

那么你可以删除那个新的页面。

  • 我在Visual Studio 2013更新4环境中有类似的问题,我尝试了所有我在网上find的build议。 没有解决我的问题。
  • 然后我尝试了解决方法。 我安装了Visual Studio 2015预览版,并使用xamarin表单项目创build了新的空白应用程序。
  • 当我添加新的Xaml文件一切正常,问题与InitialComponent方法消失。
  • 我不知道问题的原因是什么,但似乎是configuration设置的问题。

解决scheme项目引用dlls“Xamarin.Forms.Core”,“Xamarin.Forms.Xaml”和“Xamarin.Forms.Platform”版本1.0.0.0的版本1.4.0.0时,会出现此问题。

为了解决这个问题,我不得不降级到dll的1.3.3.0版本,但是这个版本的Xamarin.Forms.Platform 1.0.0.0不存在。

检查项目中引用的Xamarin.Forms包的版本。

.csproj文件 Xamarin.Forms nuget包

非常简单的解决scheme,为我工作:

  • 复制xaml / cs文件的内容
  • 删除xaml / cs文件
  • 创build一个新的类并粘贴内容

现在,InitializeComponent()函数显示为红色下划线。

希望这有助于某人。

我一直有同样的问题,这是我一直在解决它:当在PCL项目中,我添加一个新的跨平台的XAML页面的项目。 添加一个新的XAML页面需要几秒钟来引用“钩子”。 新的XAML页面成功添加到项目后,XAML页面上的红色下划线(有问题)将被清除。 一旦问题解决了,我只需删除刚添加的XAML文件。 所以,总之,添加一个新的XAML页面然后删除它已经为我解决了这个问题。

我刚刚更新所有包 ,工作正常。

在我的情况下,问题是项目的path。 生成的代码文件得到一个名称,包括编码的绝对path,使其成为一个有效的文件名。 path是“D:\ Projekt C#\ ProjectRootFolder \ Project”。 由构build工具生成的文件名是“Project.Droid.D_.Projekt_C_。Namespace等” 将项目移动到“D:\ project \ ProjectRootFolder”这样的path对我有帮助。

在我的情况下,对Xamarin.Forms NuGet包的引用消失了(Xamarin.Forms库被直接引用)。 我只是重新添加NuGet包到项目来解决这个问题。

我正在使用Visual Studio 2015,我遇到了同样的问题,并且发现networking上没有任何答案是一个完整的解决scheme。 在这里,我将解释什么对我有用。

我的主要目标是消除不断出现的红色错误信息

名称InitializeComponent在当前上下文中不存在

基本上我创build了一个名为InitializeComponent2()的函数,它和InitializeComponent2()完全一样,并用它代替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; 在使用LoadFromXaml(..)的每个.cs页面的顶部。

然后,当然将InitializeComponent()更改为InitializeComponent2()以调用新函数。 也就是说,你已经把这个函数放到与错误消失的页面相同的上下文中。 我无法想象当你修改你的项目时,真正的InitializeComponent函数会得到任何东西,但这是可能的。 到目前为止我一直很好。

我尝试了很多事情,改变了构build操作,XAML命名空间,重新启动vs,清理+重build,寻找NuGet包更新。

基本上,Visual Studio编译并运行在我的Android设备+模拟器罚款,但错误信息不会消失。 我的解决scheme是为Android,但它也可能适用于iOS等

我回到了问题的根源InitializeComponent()这个函数的实际代码是在一个名为<Your Project Name>.Page1.xaml.g.csPage2.xaml.g.cs的文件中生成的。 但是,它(文件)仅在某个事件被触发时才会生成。 我很幸运,通过在“自定义工具名称空间”中键入文本来发现该事件,该文本对于其中一个xaml页面(以.xaml结尾的文件而不是.cs确保您select了.xaml文件),types一些文本,然后按回车,文件将被创build。

然后我有一个很好的想法,使InitializeComponent2() ,一个函数完全相同的InitializeComponent()并把它放在每个cs文件,所以它不存在,每次你想错误去生成.xaml.g.cs远。

我不知道这是否解决了,但对我来说,我唯一需要做的就是删除XAML的第一行(“xml version =”1.0“encoding =”utf-8“)

有时源代码版本控制,试图识别哪种types的文件,并添加这种东西。

检查页面文本x:Class="AppName.Page1"AppName必须是您的应用程序名称