我使用的是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
所有工作......
有谁知道为什么会这样?我不想在页面切换时创建新对象......
答案 0 :(得分:0)
您已回答了这个问题,所以我只能确认一下:
System.ArgumentException: 'Cannot insert page which is already in the navigation stack'
正如您所看到的,您已经在App.NavigationPage.Navigation
中拥有页面firstPage,因此插入另一个页面会导致应用程序崩溃。您无法按照自己的说明进行操作 - 要么必须创建新实例,要么必须从堆栈中删除以前的实例。