在页面之间切换会导致Windows 10 Mobile

时间:2017-07-01 21:16:09

标签: c# xamarin xamarin.forms xamarin.uwp

我使用的是Xamarin Forms(2.3.4.247),而我的应用程序正在使用" HamburgerMenu"。要在页面之间切换,请使用它的代码:

private FirstPage firstPage; //it's i get from the constructor
private SecondPage secondPage = new SecondPage();
private ThirdPage thirdPage = new ThirdPage(); 
private async void ItemSelectedMethod()
{
        var root = App.NavigationPage.Navigation.NavigationStack[0];
        if (SelectedItem == Items[0])
        {
            if (!IsFirstChoose)
            {
                App.NavigationPage.Navigation.InsertPageBefore(firstPage, root);
                await App.NavigationPage.PopToRootAsync(false);
            }
        }
        if (SelectedItem == Items[1])
        {
            App.NavigationPage.Navigation.InsertPageBefore(secondPage, root);
            await App.NavigationPage.PopToRootAsync(false);
        }
        if (SelectedItem == Items[2])
        {
            App.NavigationPage.Navigation.InsertPageBefore(thirdPage, root);
            await App.NavigationPage.PopToRootAsync(false);
        }

        IsFirstChoose = false;
        rootPageViewModel.IsPresented = false;
}

Android和Windows 10桌面上的所有工作正常,在Windows 10移动模拟器上,当我在thirdPage和firstPage之间切换时,我的应用程序崩溃了。 FirstPage是root:

FirstPage firstPage = new FirstPage();
NavigationPage = new NavigationPage(firstPage);

我不知道为什么......模拟器不允许调试......

第二件事: 当我将Xamarin Forms更新到版本2.3.5.256-pre6时,我的应用程序抛出异常" System.ArgumentException:'无法插入已存在于导航堆栈中的页面'" ...但是当我将代码更改为:

App.NavigationPage.Navigation.InsertPageBefore(new ThirdPage(), root);
App.NavigationPage.Navigation.InsertPageBefore(new SecondPage(), root);
//etc
所有工作...... 有谁知道为什么会这样?我不想在页面切换时创建新对象......

1 个答案:

答案 0 :(得分:0)

您已回答了这个问题,所以我只能确认一下:

System.ArgumentException: 'Cannot insert page which is already in the navigation stack'

正如您所看到的,您已经在App.NavigationPage.Navigation中拥有页面firstPage,因此插入另一个页面会导致应用程序崩溃。您无法按照自己的说明进行操作 - 要么必须创建新实例,要么必须从堆栈中删除以前的实例。