Все, что мне нужно, — это главная страница при запуске приложения с всплывающим меню. В этом всплывающем меню есть ссылки на другие страницы. На этих страницах должна быть кнопка «Назад», которая возвращает вас на главную стартовую страницу. (Вместе с аппаратной кнопкой возврата)
Стек навигации должен состоять только из двух страниц. MainPage и любой другой вариант во всплывающем меню.
Я не использую AppShell, это само по себе было головной болью. Я сделал MacGyver всплывающую страницу из различных справочных документов и видео по этому вопросу. У меня есть MainPage с кнопкой, которая PushAsync на страницу 2 без проблем, кнопка «Назад» повсюду.
Всплывающее меню работает в том смысле, что на главной странице есть значок гамбургера, и оно вылетает с пунктами меню. Однако именно здесь он перестает работать. Кажется, единственный способ перейти на новую страницу — использовать:
NewPage = new NavigationPage(new Page2());
Используя этот метод, когда вы нажимаете ссылку на другую страницу, всплывающее окно закрывается, оно загружает страницу, но вместо кнопки «Назад» у него есть значок гамбургера. (Я предполагаю, потому что он не был помещен в стек...)
Я пытался использовать варианты Navigation.PushAsync(new Page2());
безрезультатно. Когда я нажимаю/нажимаю ссылку на страницу во всплывающем меню, ничего не происходит, и всплывающее меню остается открытым. Я убедился, что код действительно работает с использованием точек останова.
Я выложил проект на GitHub если кто-то хочет посмотреть. :)
это работает для меня - вероятно, его можно было бы упростить и определенно нуждается в обработке исключений
void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var item = e.CurrentSelection.FirstOrDefault() as FlyoutPageItem;
if (item != null)
{
// create the new page
var newpage = ((Page)Activator.CreateInstance(item.TargetType));
// get the navigation page
var nav = (NavigationPage)Detail;
// get the current displayed page
var page = (ContentPage)nav.CurrentPage;
// navigate to the new page
page.Navigation.PushAsync(newpage);
// hide the flyout
this.IsPresented = false;
}
}