我正在使用Visual Studio来试用Xamarin.Forms。我正在尝试遵循指南:http://developer.xamarin.com/guides/cross-platform/xamarin-forms/xaml-for-xamarin-forms/getting_started_with_xaml/
简而言之,我使用PCL创建了一个Xamarin.Forms解决方案,然后尝试将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/
如果您有解决此问题的方法,请告诉我。谢谢!
更新:
我的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();
}
}
如果在Xamarin.Forms页面中出现了Intellisense错误,例如InitializeComponent,但项目实际构建并运行正常,只需使用向导添加一个新的Forms页面来修复所有错误......
然后,您可以删除该新页面。
检查页面文本x:Class="AppName.Page1"
。 AppName必须是您的应用名称
Visual Studio 2013
update 4环境中有类似的问题,我尝试了我在网上找到的所有建议。没有什么能解决我的问题。Visual Studio 2015
预览并使用xamarin表单项目创建了新的空白应用程序。Xaml
文件时,一切都很好,InitialComponent
方法的问题消失了。清洁和重建为我做了诀窍!
右键单击* .xaml并单击属性,将“Custom Tool”值更改为“MSBuild:UpdateDesignTimeXaml”,然后将“Build Action”属性更改为“Embedded Resource”,构建项目工作。
非常简单的解决方案对我有用:
现在InitializeComponent()函数显示没有红色下划线。
希望这有助于某人。
当解决方案的项目引用dll版本1.4.0.0“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不存在。
我一直有同样的问题,这就是我一直在做的事情:在PCL项目中,我为项目添加了一个新的跨平台XAML页面。添加新的XAML页面需要几秒钟来引用“钩子”。将新的XAML页面成功添加到项目后,XAML页面上的红色下划线(有问题)将被清除。一旦问题解决了,我只需删除刚刚添加的XAML文件。 - 总而言之,添加一个新的XAML页面然后删除它已经为我解决了这个问题。
我刚更新了所有包,工作正常。
我有时会得到这个,这是迄今为止解决它们的清单:
Embedded Resource
。将页面属性更改为:
BuildAction => Embedded resource
CustomTools => MSBuild:UpdateDesignTimeXaml
遇到此错误时,我遇到了缓存问题。
要解决此问题,只需卸载最新版本的Xamarin.Forms包并重新安装以前的工作版本。
重建成功后,再次将程序包更新到最新版本。
正确检查班级名称。
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="{AppName}.{ClassName}">
</ContentPage>
类名应该是App名称和部分类名称的组合
就我而言,问题是项目路径。生成的代码文件获取一个名称,包括编码的绝对路径,使其成为有效的文件名。路径是“D:\ Projekt C#\ ProjectRootFolder \ Project”。构建工具生成的文件名是“Project.Droid.D_.Projekt_C_。Namespace etc.”将项目移动到像“D:\ project \ ProjectRootFolder”这样的路径有助于我的工作。
我正在使用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
函数会在你修改项目时添加任何东西,但这是可能的。到目前为止对我来说一切都很好。
我尝试了很多东西,改变了Build Action,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
。
我不知道这是否已经解决,但对我来说,我唯一要做的就是删除XAML的第一行(“xml version =”1.0“encoding =”utf-8“)
有时源版本控制,尝试识别哪种类型的文件,并添加这种东西。
添加using Xamarin.Forms.Xaml
在Visual Studio 2017上测试
App.xaml
和MainPage.xaml
文件。MSBuild:UpdateDesignTimeXaml
”最终解决方案是在文本编辑器中编辑项目文件,然后从另一个非冲突文件中复制模式。这个解决方案对我有用。通常,您会查找以下语法:
<Compile Update="Your\Path\YourContentPage.xaml.cs">
<DependentUpon>YourContentPage.xaml</DependentUpon>
</Compile>
在Xaml页面属性中仅设置
Build Action = Embedded resource
它适用于2017年的视觉工作室。
就我的观察而言,在Visual Studio 2015中,XAML属性已经按照默认情况下高度投票的答案建议设置,具体如下:
MSBuild:UpdateDesignTimeXaml
Embedded Resource
但错误仍然有时出现......(就像在this other question)。
编辑相应的XAML文件,然后按CTRL + S应该工作正常,但你不必。强制运行自定义工具的更简洁方法是右键单击XAML文件,然后单击“运行自定义工具”上下文菜单。
尝试了以上所有并且没有运气,对我有用的是强制重新安装Xamarin.Forms包。在包管理器控制台提示符;
update-package xamarin.forms -reinstall
它不会更新包,只是删除和重新添加
我遇到了这个问题。它与VS中的XAML文件编码相关联。我正在使用VS2015。
我解决了这个问题如下:
更新Xamarin.Forms NuGet包应该可以完成这项工作
这可能不是你的情况,但我有类似的问题,我的是xaml和名称不匹配的代码。例如,根据您的示例,如果命名空间后面的代码是XamaTest(大多数情况下您的应用程序的名称)而类称为MyXamlPage,则您的xaml类名必须是XamaTest.MyXamlPage([namespace]。[classname])
在创建一个带有代码的空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
尝试在xaml页面上添加ax:Name =“...”...没有其他工作对我来说 - 但是在页面上的某些元素上添加x:Name属性后,错误消失了(大多数时候 - 我还是有时候得到它)。我使用Xamarin.Forms的最新版本(1.5.0.6447)...
XAML不适用于共享项目 - 它只适用于便携式项目......
看起来blah.xaml.g.cs
文件的(重新)生成实际上是问题所在。我在共享项目中得到了很多(这就是为什么我不使用它们,除非我别无选择)。出于某种原因,对于我来说,它在Xamarin Studio中比在Visual Studio中更多。我尽量不使用XS。
通常卸载其他平台之一(例如,如果你正在构建机器人,卸载ios)并进行干净和重建将解决它。
你也可以尝试做一些事情,比如打开一个有问题的.xaml
文件并更改一些xaml标记(例如添加或更改x:Name
到其中一个控件或视图)。这将强制重新生成xaml.g.cs文件,并且(至少对我来说)通常可以解决问题。
这真的不应该是一件事。
我遇到这个错误;
ContentPage-cs+xaml
和App-cs+xaml
而没有实际删除它。这是固定的;
.xaml
文件。properties
。Build action
选择“嵌入式资源”Custom Tool
中输入“MSBuild:UpdateDesignTimeXaml”