Xamarin.Forms - 创建新页面时,InitializeComponent不存在

75

我正在使用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/

如果您有解决这个问题的方案,请告诉我。谢谢!

更新:

我的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 项目版本是哪个?我记得旧的项目模板存在问题。 - Steve Mitcham
我应该提到我使用的是Visual Studio和试用版。如何检查版本或更新到最新版本?谢谢您的回答。我尝试右键单击pcl并从nuget下载最新的xamarin-Forms。仍然存在同样的问题。 - user2915962
你能分享一下你的项目源代码吗? - Artur Shamsutdinov
谢谢,我已经更新了问题。如果您需要更多信息,请告诉我。 - user2915962
以防万一:我在将解决方案移动到新文件夹后遇到了相同的问题。我不得不手动编辑.csproj文件,以更新“packages”文件夹,然后它又可以重新编译了。 - bN_
34个回答

60

更新: 在VS 2015中通常不会出现此错误,如果出现了,请参考我的原始答案:

找到解决方案!右键单击.XAML文件,选择属性

您将看到一个名为自定义工具的属性。将其值从MSBuild:Compile更改为MSBuild:UpdateDesignTimeXaml

这将解决问题。 不知道为什么被踩了,但这是我的截图:

Screenshot 更新:

它很少会再次出现。如果出现了,请打开Xaml和代码后面的文件并保存它们。我知道,这不是最好的解决方案,但它能完成工作。


这在我的情况下已经设置了,但错误仍然出现。 - Simon K.
我以为这是解决方案,但实际上我已经实现了它。我还尝试了重新保存的技巧,但它没有起作用。 - Ismapro
3
在我的项目中,某个属性的值为MSBuild:UpdateDesignTimeXaml。当我将其改为MSBuild:Compile后,问题得到了解决。VS很糟糕。 - Bruno Brito
2
@Veverke,抱歉回复晚了,但请看我的答案底部。 如果您已经有MSBuild:Compile,只需打开Xaml和代码后备文件并保存它们。我知道这不是最好的解决方案,但它可以完成工作。 - Dushyant Bangal
1
最近我也遇到了同样的问题,但是这个解决方案并不能解决我的问题,因为我的项目文件路径非常长,超过了160个字符直到类名。.g.cs 无法生成。最终通过更改路径成功解决了这个问题。 - Diego Rafael Souza
显示剩余7条评论

38

我有时会遇到这个问题,以下是目前解决它们的检查清单:

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

  2. 从正确的父类继承 - 对于页面使用ContentPage,对于控件使用ContentView

  3. 如果在共享项目中,请将.xaml文件的构建操作设置为"嵌入式资源"


1
对于我而言,我需要4。属性称为Custom Tool。将其值从MSBuild:Compile更改为MSBuild:UpdateDesignTimeXaml,如此在这里的另一篇帖子中所述... - Tony Trembath-Drake
2
我的问题出在x:Class上。似乎它仍然指向Page1。 - frostymarvelous
4
确保.xaml和.xaml.cs文件中的命名空间匹配。这是一个重要的提示点。有时Visual Studio不会自动更新它。 - Aman Sura
1
有趣的事实:如果您在类上使用重命名重构,XAML 将不会更新,从而导致此错误。IDE 像往常一样没有帮助。 - Cobus Kruger
1
是的,这是主要原因。每当我们更改 xaml.cs 文件的命名空间或类名时,相关的 xaml 文件不会被更新。这就导致了所提到的错误。 - MrClan
显示剩余2条评论

32
据我所观察,在Visual Studio 2015中,XAML属性已经默认设置为高票答案建议的方式,具体如下:
  • Custom Tool = MSBuild:UpdateDesignTimeXaml
  • Build Action = Embedded Resource
但有时仍会出现错误(例如在此其他问题中)。
编辑相应的XAML文件,然后按 CTRL+S 应该可以正常工作,但您不必这样做。强制运行自定义工具的更干净的方法是右键单击XAML文件,然后单击“运行自定义工具”上下文菜单。

输入图像描述


12

也许这不是你的问题,但我遇到了类似的问题,我的问题是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>

后台代码:

public partial class MyXamlPage : ContentPage

工作正常。我重命名了 Foo.xaml.cs 但忘记修改 x:Class="XXX.Foo"(在VS中进行重构是不好的)。 - MD TAREQ HASSAN
谢谢!我已经困扰了几个小时,一直没有找到可行的解决方案。重命名XAML文件后问题得到了解决。 - Vering
我也试过了,只需要确保x:class与实际类匹配即可。谢谢! - Ryano

12

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

我通过以下方式解决了这个问题:

  1. 在项目中打开*.xaml文件并单击保存按钮。(这将在VS2015中应用正确的编码)。

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


1
它对我有效。在空白项目中添加错误真的是微软的业余工作。仅编译“Hello World”就花费了我很多时间。愿上帝保佑Android Studio。 - jan hruska
1
这对我也起作用了!真的希望这能很快被微软/Xamarin修复。 - sh1rts
也对我有效! - penguru
我没有改变编码。在我的情况下,简单的“重建”有所帮助。 - Konstantin

12

更新Xamarin.Forms NuGet包应该可以解决问题。


谢谢你的建议。不幸的是,在我的情况下它没有改变任何事情。 - user2915962
嗯,我遇到了同样的问题,但这个方法对我有效。你的解决方案中还有其他的包吗? - Thomas Weller
不,只是一个带有默认PCL的“新鲜”的Xamarin.Forms应用程序。 - user2915962
2
在这里找到了解决方案: http://blog.galasoft.ch/posts/2014/07/using-xamarin-forms-with-mvvmlight/ 显然,在创建新的XAML页面时存在一个错误。它会自动获取扩展名.cs而不是xaml。我从未注意到这一点。谢谢! - user2915962
2
@user2915962,NuGet包的更新和清理/重建(+重启)并没有解决我的问题。读了你的评论后,我决定添加一个新的Xamarin Forms XAML页面。在构建了新页面后,两个页面上的“InitializeComponent”错误消失了!看起来像是某种VS状态问题。当问题存在时,我可以毫无问题地跟踪编译器生成的InitializeComponent代码。我猜想,在NuGet包升级之后添加一个新的XamForms XAML页面有助于解决一些VS内部状态,而清理/重建则没有,但这是未经证实的。 - Richard Logwood
显示剩余2条评论

5

尝试在xaml页面上添加x:Name =“...”属性...没有其他方法适用于我-但在页面上的一些元素上添加x:Name属性后,错误消失了(大多数情况下-有时仍会出现)。我使用最新版本的Xamarin.Forms(1.5.0.6447)...

XAML不适用于共享项目-它只适用于可移植项目...


2
我有一个元素/控件没有x:Name属性...一旦我添加了它,错误就消失了。 - David

4

当我执行以下操作时遇到了这个错误:

  1. 从项目中移除了一个ContentPage-cs+xamlApp-cs+xaml文件,但实际上没有将其删除。
  2. 将它们添加到了另一个文件夹中。

解决方法如下:

  1. 选择存在问题的类的.xaml文件。
  2. 右键单击并选择属性
  3. 生成操作中选择“嵌入式资源”。
  4. 自定义工具中输入“MSBuild:UpdateDesignTimeXaml”。
  5. 清理并构建项目即可消除错误。

4
看起来问题实际上是生成blah.xaml.g.cs文件的问题。在共享项目中,我经常遇到这种问题(这就是为什么除非没有其他选择,否则我不使用它们)。对于我来说,它在Xamarin Studio中比Visual Studio更常见,原因不明。我尽量不使用XS。
通常卸载其他平台之一(例如,如果您正在构建droid,则卸载ios)并进行清理和重建即可解决。
您也可以尝试打开其中一个有问题的.xaml文件,并更改一些xaml标记(例如,将x:Name添加或更改为其中一个控件或视图)。这将强制重新生成xaml.g.cs文件,并且(至少对我来说)通常可以解决问题。
但事实上这真的不应该发生。

4

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接