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

时间:2015-03-02 20:05:07

标签: xamarin xamarin.forms

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

简而言之,我使用PCL创建了一个Xamarin.Forms解决方案,然后尝试在PCL项目中添加Forms XAML Page

创建的代码隐藏如下:

    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();
        }
    }

34 个答案:

答案 0 :(得分:56)

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

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

您会看到名为自定义工具的媒体资源。将其值从MSBuild:Compile更改为MSBuild:UpdateDesignTimeXaml

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

Screenshot更新:

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

答案 1 :(得分:32)

我有时会得到这个,这是迄今为止解决它们的清单:

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

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

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

答案 2 :(得分:29)

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

  • 自定义工具= MSBuild:UpdateDesignTimeXaml
  • 构建操作= Embedded Resource

但错误有时仍会出现......(例如在this other question中)。

编辑相应的XAML文件然后点击 CTRL + S 应该可以正常工作,但你不必这样做。强制运行自定义工具的一种更简洁的方法是右键单击XAML文件,然后单击&#34;运行自定义工具&#34;上下文菜单。

enter image description here

答案 3 :(得分:12)

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

我解决了这个问题如下:

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

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

答案 4 :(得分:10)

更新Xamarin.Forms NuGet包应该完成这项工作

答案 5 :(得分:6)

这可能不是你的情况,但我有类似的问题,我的是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

答案 6 :(得分:4)

尝试添加x:名称=&#34; ...&#34;在xaml页面上...没有其他工作对我来说 - 但是在页面上的某些元素上添加x:Name属性后,错误消失了(大多数时候 - 我有时会得到它)。我使用Xamarin.Forms的最新版本(1.5.0.6447)......

XAML不参与共享项目 - 它只适用于便携式项目......

答案 7 :(得分:3)

我遇到此错误时

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

    修复的
    1. 选择出现问题的类的.xaml文件。
    2. 右键单击并选择properties
    3. Build action中选择“嵌入资源”
    4. Custom Tool类型“MSBuild:UpdateDesignTimeXaml”
    5. 清洁和建造它已经消失了。

答案 8 :(得分:3)

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

经常卸载其他平台之一(例如,如果您正在构建机器人,卸载ios)并进行清理和重建将解决它。

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

这真的不应该成为一件事。

答案 9 :(得分:3)

如果在Xamarin.Forms页面中出现了Intellisense错误,例如InitializeComponent但项目实际构建并运行正常,只需使用向导添加一个新的Forms页面来修复所有错误......

然后你可以删除那个新页面。

答案 10 :(得分:3)

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

答案 11 :(得分:2)

  • 我在Visual Studio 2013更新4环境中遇到了类似的问题,我尝试了所有在网络上找到的建议。没有什么能解决我的问题。
  • 然后我尝试了解决方法。我安装了Visual Studio 2015预览,并使用 xamarin 表单项目创建了新的空白应用。
  • 当我添加新的Xaml文件时,一切正常,InitialComponent方法的问题就消失了。
  • 我不知道问题的原因究竟在哪里,但似乎是围绕配置设置的问题。

答案 12 :(得分:2)

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

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

现在出现的InitializeComponent()函数没有红色下划线。

希望这有助于某人。

答案 13 :(得分:2)

右键单击* .xaml并单击属性,然后更改&#34;自定义工具&#34;值为&#34; MSBuild:UpdateDesignTimeXaml&#34;,下一次更改&#34;构建操作&#34;属性为&#34; 嵌入式资源&#34;, 建立项目工程。

答案 14 :(得分:2)

清洁和重建为我做了诀窍!

答案 15 :(得分:1)

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

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

重建成功后,再将更新包再次升级到最新版本。

答案 16 :(得分:1)

  

将页面属性更改为:

BuildAction => Embedded resource 
CustomTools => MSBuild:UpdateDesignTimeXaml

答案 17 :(得分:1)

正确检查班级名称。

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

类名应为应用程序名称和部分类名的组合

答案 18 :(得分:1)

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

答案 19 :(得分:1)

我只是更新所有套餐,工作正常。

答案 20 :(得分:1)

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

.csproj file Xamarin.Forms nuget package

答案 21 :(得分:1)

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

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

答案 22 :(得分: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函数会在您修改项目时添加任何内容,但这是可能的。 到目前为止,对我来说还不错。

我尝试了很多东西,更改了Build Action,XAML命名空间,重启vs,清理+重建,寻找NuGet包更新。

基本上,Visual Studio在我的Android设备+模拟器上编译并运行程序很好,但该错误信息不会消失。 我的解决方案适用于Android,但它也适用于iOS等。

我回到了问题的根源InitializeComponent()此函数的实际代码是在名为<Your Project Name>.Page1.xaml.g.csPage2.xaml.g.cs的文件中生成的。但是,它(文件)是 仅在某个事件被触发时生成。我很幸运地发现了 它通过在&#34;自定义工具命名空间&#34;中键入文本来触发该事件,其中一个xaml页面(以.xaml结尾的文件,而不是.cs - 确保您拥有{ {1}}文件已选中),键入一些文本并按Enter键,将创建文件。

然后我有了创建.xaml的好主意,这个函数与InitializeComponent2()完全相同,并将它放在每个cs文件中,因此它存在 每次你想要错误时都不必生成InitializeComponent() 走开。

答案 23 :(得分:0)

添加using Xamarin.Forms.Xaml

在Visual Studio 2017上测试

答案 24 :(得分:0)

在我的情况下,问题是项目路径。 生成的代码文件获取一个名称,包括编码的绝对路径,使其成为有效的文件名。 路径是&#34; D:\ Projekt C#\ ProjectRootFolder \ Project&#34;。 构建工具生成的文件名为&#34; Project.Droid.D_.Projekt_C_。命名空间等。&#34; 将项目移动到类似&#34; D:\ project \ ProjectRootFolder&#34;的路径帮助我。

答案 25 :(得分:0)

  1. 选择出现问题的班级的App.xamlMainPage.xaml文件。
  2. 右键单击并选择属性。
  3. 在构建操作中,选择&#34;嵌入式资源&#34;
  4. 在自定义工具类型&#34; MSBuild:UpdateDesignTimeXaml&#34;
  5. 清洁和建造它已经消失了。

答案 26 :(得分:0)

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

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

答案 27 :(得分:0)

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

有时候源版本控制会尝试识别哪种类型的文件并添加这种东西。

答案 28 :(得分:0)

在Xaml页面属性中仅设置
 Build Action = Embedded resource
它适用于2017年的视觉工作室。

答案 29 :(得分:0)

尝试了以上所有并且没有运气,对我有用的是强制重新安装Xamarin.Forms软件包。在包管理器控制台提示符中;

update-package xamarin.forms -reinstall

它不会更新包,只是删除并重新添加

答案 30 :(得分:0)

我在根元素中缺少特定的引用属性(在我的情况下为util

<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="MyProject.Views.HomePage"
    xmlns:util="clr-namespace:Porject.Library.Util;assembly=Library"
    >

答案 31 :(得分:0)

这似乎是由许多原因引起的,因此,如果您已阅读所有这些内容并尚未解决,则:

矿井是由解决方案配置设置为发布引起的。更改为调试并已解决错误。

答案 32 :(得分:0)

我在VS Community Edition 2019上遇到了同样的问题,我只是使用了再生解决方案,问题已解决

答案 33 :(得分:0)

对我来说,这只是一个流氓XAML,在<?xml version="1.0" encoding="utf-8" ?>之前是前导空格

 <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
...

导致一堆CS0103 The name 'InitializeComponent' does not exist in the current context错误。