Я использую 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 Mobile мое приложение вылетает, когда я переключаюсь между третьей страницей и первой страницей. Первая страница является корневой:
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
все работает... Кто-нибудь знает, почему это происходит? Я не хочу создавать новые объекты при переключении страниц...