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:Compile
为MSBuild:UpdateDesignTimeXaml
这将解决问题。 不知道downvote,但这里是我的截图:
更新:
它很less再出现。 如果是这样,只需打开Xaml和代码隐藏文件并保存。 我知道,这不是最好的解决scheme,但它完成了工作。
就我的观察而言,在Visual Studio 2015中,默认情况下,XAML属性已经被设置为高度投票答案的build议,具体来说:
- 自定义工具=
MSBuild:UpdateDesignTimeXaml
- 构build行动=
Embedded Resource
但错误仍然有时出现…(就像在这个其他问题 )。
编辑相应的XAML文件,然后按CTRL + S应该可以正常工作,但是你不需要。 强制自定义工具运行的更简单的方法是右键单击XAML文件,然后单击“运行自定义工具”上下文菜单。
我有时得到这个,这是目前解决它们的清单:
-
确保.xaml和.xaml.cs中的名称空间匹配
-
inheritance正确的父级ContentPage的页面和ContentView控件
-
如果在共享项目中,将.xaml文件的生成操作设置为
Embedded Resource
。
我遇到了这个问题。 它与VS中的XAML文件的编码相关联。 我正在使用VS2015。
我解决了这个问题如下:
-
打开项目中的* .xaml文件,然后单击保存button。 (将会在VS2015中应用正确的编码)。
-
然后重新打开项目并重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
我遇到这个错误的时候;
- 我从项目中删除了一个
ContentPage-cs+xaml
和App-cs+xaml
,而没有实际删除它。 - 重新将这些添加到另一个文件夹中的项目。
这是固定的;
- select存在问题的类的
.xaml
文件。 - 右键单击并select
properties
。 - 在
Build action
select“Embedded Resource” - 在
Custom Tool
types“MSBuild:UpdateDesignTimeXaml” - 清洁和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包的版本。
非常简单的解决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.cs
或Page2.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必须是您的应用程序名称