在Xamarin Forms Project中的OnAppearing方法中调用InitializeComponent

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Xamarin Forms Project中的OnAppearing方法中调用InitializeComponent相关的知识,希望对你有一定的参考价值。

是否有任何原因或问题我无法在xamarin表单项目中的页面的OnAppearing函数中调用InitializeComponent方法?我知道我必须只调用一次InitializeComponent来创建实际的页面。但是,如果我检查内容已经创建并按以下方式执行,该怎么办?这是一个糟糕的实施或实践?因为据说基于xaml的应用程序没有这样做,并且总是在页面的构造函数中调用它。

我想这样做的原因如下所示,因为xamarin.forms启动时间在android上运行缓慢,如果你使用Masterdetail页面(我认为相同的选项卡页面),你必须在启动时初始化它,它会导致每个导航页面定义在masterdetail页面中进行初始化,根据你的用户界面需要2-3秒才能获得更高的成本。对此有何想法或经验?

protected override void OnAppearing()
 {    
   if (Content == null)
    {
     InitializeComponent();
    }
}
答案

我不推荐这种方法。来自xamarin文档。

该类的构造函数调用InitializeComponent,然后调用LoadFromXaml方法从PCL中提取XAML文件(或其编译的二进制文件)。 LoadFromXaml初始化XAML文件中定义的所有对象,在父子关系中将它们全部连接在一起,将代码中定义的事件处理程序附加到XAML文件中设置的事件,并将生成的对象树设置为页面的内容。

https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/getting_started_with_xaml/

如果您的表单在Android上太慢,我会启用快速渲染

在主要活动的OnCreate中,在Xamarin.Forms.Init之前添加这行代码

Forms.SetFlags("FastRenderers_Experimental");

https://xamarinhelp.com/xamarin-forms-fastrenderers-android/

尝试使用已编译的Xaml也没有什么坏处

using Xamarin.Forms.Xaml;
...
[XamlCompilation (XamlCompilationOptions.Compile)]
public class HomePage : ContentPage
{

https://developer.xamarin.com/guides/xamarin-forms/xaml/xamlc/

以上是关于在Xamarin Forms Project中的OnAppearing方法中调用InitializeComponent的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms - 我的主应用程序文件应该命名为“App.cs”还是“name_of_project.cs”?

图像控件未在 WinRT 8.1 Xamarin.Forms(便携式)项目中呈现

Xamarin.forms ENTRY 隐藏键盘

如何从解决方案中的文件加载 XML 文件,使用嵌入式资源构建?项目 > 跨平台 > Xamarin.Forms

Xamarin Forms 便携式项目:UWP 错误 -2147467259

Xamarin.Forms 编辑器相等的字符空间