在Xamarin.Forms中,在OnStart期间将MainPage设置为NavigationPage会在Android上显示空白屏幕。

3
我有一个Xamarin Forms应用程序,在OnStart期间将MainPage设置为NavigationPage。
NavigationPage是静态的(保留在内存中以便重复使用)。
当我在Android中按返回按钮并返回应用程序时,会再次执行OnStart方法,并且应用程序显示一个空白屏幕。

请查看此处的演示:Xamarin.Forms OnStart Navigation

public partial class App : Application
{
    private static readonly NavigationPage NavigationPage = new NavigationPage(new MainPage());
    public App ()
    {
        InitializeComponent();
    }

    protected override void OnStart()
    {
        MainPage = NavigationPage;
    }
}

如果我在构造函数中执行相同的操作,应用程序将按预期运行:没有空白屏幕,并显示最后访问的页面。
请参见此处的重现:Xamarin.Forms构造函数导航
public partial class App : Application
{
    private static readonly NavigationPage NavigationPage = new NavigationPage(new MainPage());
    public App ()
    {
        InitializeComponent();

        MainPage = NavigationPage;
    }
}

在构造函数和OnStart方法中设置MainPage的区别是什么?

2
MainPage 属性应该在 App 构造函数中设置: https://learn.microsoft.com/zh-cn/xamarin/xamarin-forms/app-fundamentals/application-class#mainpage-property - Oscar Fraxedas
而不起作用的原因是构造函数在UI线程上运行,而OnStart则不是。 - FreakyAli
1个回答

3

不要在onstart中使用静态mainpage,它应该在init调用之外初始化。

在InitializeComponents之后的构造函数中执行。

就像这样:

public partial class App : Application
{
private static readonly NavigationPage NavigationPage;
public App ()
{
    InitializeComponent(); 
    NavigationPage = new NavigationPage(new MainPage());

    MainPage = NavigationPage;
}
}

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