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


73

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

简而言之,我使用PCL创建Xamarin.Forms解决方案,然后尝试将a添加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表单项目。我似乎还记得较早的项目模板存在的问题。
Steve Mitcham'3

我应该提到我使用Visual Studio和一个试用版。如何检查版本或更新为最新版本?感谢您的回答。我尝试右键单击pcl,然后从nuget下载最新的xamarin-Forms。同样的问题。
user2915962

您可以共享项目的源代码吗?
Artur Shamsutdinov

谢谢,我更新了问题。如果您需要更多信息,请告诉我。
user2915962'3

以防万一:将解决方案移到新文件夹后,我遇到了同样的问题。我必须编辑.csproj文件来手动更新“ packages”文件夹,然后碰巧再次编译。
bN_

Answers:


58

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

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

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

这样可以解决问题。不了解下降投票,但这是我的屏幕截图:

屏幕截图 更新:

它很少再出现。如果是这样,只需打开Xaml并在文件后面编码并保存即可。我知道,这不是最佳解决方案,但可以完成工作。


很高兴知道。您可以通过给+1
Dushyant Bangal,

通过模板在一个干净的新项目上也得到了相同的结果。更改并重新保存代码隐藏文件和.xaml文件对我来说已解决了。
angularsen 2016年

3
在我的项目中,该值为MSBuild:UpdateDesignTimeXaml。在我更改为MSBuild:Compil之后。VS SUCKS
Bruno Brito

2
@Veverke,很抱歉收到您的延迟答复,但请看我答案的底部。如果您MSBuild:Compile刚刚打开Xaml,并在文件后面编码并保存它们。我知道,这不是最佳解决方案,但可以完成工作。
Dushyant Bangal,2017年

1
最近,我遇到了同样的问题,由于项目文件的路径很长,因此该解决方案无法解决。我的意思是直到类名超过160个字符。.g.cs无法生成。改变道路结束了斗争。
迭戈·拉斐尔·苏扎

35

有时我会得到这个,到目前为止,这是解决了他们的清单:

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

  2. 从正确的父类继承-页面的ContentPage和控件的ContentView

  3. 将.xaml文件的构建操作设置为Embedded Resourceif在共享项目中。


1
对我来说-我需要4.名为“自定义工具”的属性。如在另一篇文章中所述,将其值从MSBuild:Compile更改为MSBuild:UpdateDesignTimeXaml ...
Tony Trembath-Drake

2
我的问题是x:Class。看来它仍然指向Page1
frostymarvelous '16

4
确保.xaml和.xaml.cs中的名称空间匹配。。Visual Studio有时不会自动更新它。
阿曼苏拉(Aman Sura)

1
有趣的事实:如果在类上使用重命名重构,则XAML不会更新,从而导致此错误。与以往一样,IDE毫无帮助。
Cobus Kruger

1
是的,这是主要原因。每当我们更改xaml.cs文件的名称空间或类名时,关联的xaml文件都不会更新。并导致上述错误。
MrClan

32

就我的观察而言,默认情况下,在Visual Studio 2015中,XAML属性已按照此处高度投票的答案的建议进行设置,特别是:

  • 自定义工具= MSBuild:UpdateDesignTimeXaml
  • 建立动作= Embedded Resource

但有时还是会出现错误...(就像在另一个问题中一样)。

编辑相应的XAML文件,然后单击CTRL+S应该可以正常工作,但是您不必这样做。强制运行自定义工具的更干净的方法是,右键单击XAML文件,然后单击“运行自定义工具”上下文菜单。

在此处输入图片说明


12

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

我解决了这个问题,如下所示:

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

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


1
这个对我有用。向空白项目添加错误实际上是Microsoft的业余工作。我花了很多时间来编译hello world。上帝保佑android studio
jan hruska's

1
这也对我有用!真希望MS / Xamarin尽快解决此问题
。– sh1rts

也为我工作!
penguru

我没有更改编码。简单的“重建”对我的情况有所帮助
Konstantin

12

更新Xamarin.Forms NuGet包应该可以完成工作


谢谢你的提示。不幸的是,在我看来,它没有任何改变。
user2915962

嗯 我有同样的问题,对我有用。您的解决方案中还有其他软件包吗?
Thomas Weller'3

不,只有带有默认PCL的“新鲜” Xamarin.Forms应用程序。
user2915962'3

2
在此处找到解决方案:blog.galasoft.ch/posts/2014/07/…创建新的xaml页时,显然存在一个错误。它会自动获取扩展名.cs而不是xaml。我从来没有注意到这一点。谢谢!
user2915962'3

2
@ user2915962 NuGet软件包更新和清理/重建(+重新启动)没有为我解决问题。阅读您的评论后,我决定添加一个新的Xamarin Forms XAML页面。用新页面构建后,两个页面上的“ InitializeComponent”错误都消失了!看起来像某种VS状态问题。当问题出现时,我可以顺利完成编译器生成的InitializeComponent代码。我猜想在NuGet软件包升级之后添加一个新的XamForms XAML页面有助于理清一些VS内部状态,而清理/重建并没有,但是尚未确认。
理查德·洛伍德

10

这可能不是您的情况,但我遇到了类似的问题,我的是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

工作了。我重命名Foo.xaml.cs但忘了更改x:Class="XXX.Foo"(在VS中引用不好)
Hassan Tareq

谢谢!!!没有工作的解决方案已经运行了几个小时。它做同样的事情-重命名了xaml。
Vering

5

尝试在xaml页面上添加ax:Name =“ ...” ...对于我来说,没有其他选择-但是在页面上的某些元素上添加了x:Name属性后,错误消失了(大多数情况下-我有时还是会得到它)。我使用Xamarin.Forms的最新版本(1.5.0.6447)...

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


2
我有1元/控制那些没有X:名称属性上it..once我补充说,该错误走了
大卫

4

我在什么时候遇到这个错误;

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

这是由解决的;

  1. 选择.xaml存在问题的类的文件。
  2. 右键单击并选择properties
  3. Build action选择“嵌入式资源”
  4. Custom Tool “ MSBuild:UpdateDesignTimeXaml”类型中
  5. 清理并构建,它消失了。

4

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


3

看起来blah.xaml.g.cs文件的(重新)生成实际上是问题所在。我在共享项目中得到了很多(这就是为什么除非别无选择,否则我不使用它们的原因)。对于我来说,由于某种原因,它在Xamarin Studio中的发生比在Visual Studio中发生的更多。我尝试一点也不使用XS。

通常会卸载其他平台之一(例如,如果您正在构建droid,则卸载ios)并进行清理和重建将对其进行修复。

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

这确实不应该是这样。


3

如果您在Xamarin.Forms页面中遇到智能错误,例如InitializeComponent,但该项目实际上可以正常构建并正常运行,只需使用向导添加新的Forms页面即可修复所有错误...

然后,您可以删除该新页面。


2
  • 我在Visual Studio 2013Update 4环境中遇到了类似的问题,并且尝试了所有在网上发现的建议。没有任何办法解决我的问题。
  • 然后,我尝试了解决方法。我安装了Visual Studio 2015预览,并使用xamarin表单项目创建了新的空白应用。
  • 当我添加新Xaml文件时,一切正常,InitialComponent方法问题消失了。
  • 我不知道问题的确切原因在哪里,但似乎是在配置设置周围出现的问题。

欢迎使用Stackoverflow。使用某种格式使其具有可读性。
NJInamdar

我也必须这样做。但是,当我打开VS 2013中的旧项目时,错误又回来了!在VS 2015中创建的项目未显示。也许可以缩小原因。
Dushyant Bangal,2015年


2

右键单击* .xaml,然后单击属性,然后将“自定义工具”值更改为“ MSBuild:UpdateDesignTimeXaml”,然后将“构建操作”属性更改为“嵌入式资源”,以构建项目。


2

对我有用的非常简单的解决方案:

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

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

希望这对某人有帮助。


是的,我发现了相同的东西。没事。最终,复制内容,完全删除文件并从头开始重新添加它们是唯一的解决方案。
rob_james

2

正确检查班级名称。

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="{AppName}.{ClassName}">
</ContentPage>

类名称应为App名称和部分类名称的组合


1

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

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


1

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

.csproj文件 Xamarin.Forms nuget包


这个答案有效,卸载包含proj的错误,并编辑.csproj文件以使您具有xamarin版本的软件包文件夹
shalin

1

我时不时遇到相同的问题,而这就是我要解决的问题:在PCL项目中,我向项目添加了一个新的跨平台XAML页面。添加新的XAML页需要花费几秒钟来引用“ hook”。将新的XAML页面成功添加到项目后,XAML页面上的红色下划线(有问题)将被清除。解决问题后,只需删除刚刚添加的XAML文件。-因此,总而言之,添加一个新的XAML页然后删除它已经为我解决了这个问题。




1

遇到此错误时,我遇到了缓存问题。

要解决此问题,只需卸载最新版本的Xamarin.Forms程序包,然后重新安装以前的工作版本。

重建成功后,请再次将软件包更新为最新版本。


1

看来,这是由许多原因引起的,因此,如果您已阅读所有这些内容并尚未解决,请执行以下操作:

我的是由“解决方案配置”设置为“释放”引起的。更改为调试并解决错误。


0

就我而言,问题是项目路径。生成的代码文件将获得一个名称,该名称包括经过编码以使其成为有效文件名的绝对路径。路径为“ D:\ Projekt C#\ ProjectRootFolder \ Project”。由构建工具生成的文件名是“ Project.Droid.D_.Projekt_C_。命名空间等。” 在我的情况下,将项目移动到“ D:\ project \ ProjectRootFolder”之类的路径很有帮助。


0

我使用的是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命名空间,重新启动与清理+重建,寻找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每次生成您想消除的错误时就生成。


0

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

有时,源版本控制试图识别文件的类型并添加此类内容。



0
  1. 选择存在问题的类的App.xamlMainPage.xaml文件。
  2. 右键单击并选择属性。
  3. 在“生成操作”中,选择“嵌入式资源”
  4. 在自定义工具中输入“ MSBuild:UpdateDesignTimeXaml
  5. 清理并构建,它消失了。

0

最终的解决方案是在文本编辑器中编辑项目文件,然后仅从另一个无冲突的文件中复制模式。这个解决方案对我有用。通常,您会寻找以下语法:

<Compile Update="Your\Path\YourContentPage.xaml.cs">
  <DependentUpon>YourContentPage.xaml</DependentUpon>
</Compile>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.