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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xamarin.Forms - 创建新页面时不存在InitializeComponent相关的知识,希望对你有一定的参考价值。

我正在使用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();
        }
    }
答案

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

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

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

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

Screenshot更新:

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

另一答案

如果在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”,构建项目工作。

另一答案

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

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

现在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不存在。

另一答案

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

.csproj file Xamarin.Forms nuget package

另一答案

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

另一答案

我刚更新了所有包,工作正常。

另一答案

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

  1. 确保.xaml和.xaml.cs中的命名空间匹配
  2. 从正确的父级继承 - 页面的ContentPage和控件的ContentView
  3. 如果在共享项目中,则将.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;放在每个使用.csLoadFromXaml(..)页面的顶部。

然后当然将InitializeComponent()改为InitializeComponent2()来调用新函数。即你已将该函数放入与使错误消失的页面相同的上下文中。我无法想象真正的InitializeComponent函数会在你修改项目时添加任何东西,但这是可能的。到目前为止对我来说一切都很好。

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

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

我回到了问题的根源InitializeComponent()这个函数的实际代码是在一个名为<Your Project Name>.Page1.xaml.g.csPage2.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上测试

另一答案
  1. 选择存在问题的类的App.xamlMainPage.xaml文件。
  2. 右键单击并选择属性。
  3. 在Build action中选择“Embedded Resource”
  4. 在自定义工具类型“MSBuild:UpdateDesignTimeXaml
  5. 清洁和建设,它消失了。
另一答案

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

<Compile Update="YourPathYourContentPage.xaml.cs">
  <DependentUpon>YourContentPage.xaml</DependentUpon>
</Compile>
另一答案

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

另一答案

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

  • 自定义工具= MSBuild:UpdateDesignTimeXaml
  • Build Action = Embedded Resource

但错误仍然有时出现......(就像在this other question)。

编辑相应的XAML文件,然后按CTRL + S应该工作正常,但你不必。强制运行自定义工具的更简洁方法是右键单击XAML文件,然后单击“运行自定义工具”上下文菜单。

enter image descriptio<p>以上是关于Xamarin.Forms - 创建新页面时不存在InitializeComponent的主要内容,如果未能解决你的问题,请参考以下文章</p> 
<p > <a style=Xamarin Forms 在 UWP 上是不是存在内存泄漏?

Xamarin Forms 中条目的水平放置是不是存在任何已知问题?

Xamarin.Forms NavigationPage PushAsync 不滚动

如何在 Xamarin.Forms 中切换页面?

Xamarin.Forms webview 进行身份验证,导航到新页面(Shell)并需要再次重新验证?

从导航堆栈中删除页面 - xamarin.forms