Удалить несколько страниц из стека - xamarin.forms

У меня есть приложение xamarin.forms, которое имеет несколько экранов. Навигация по моим страницам такая.

1 -> 2 -> 3 -> 4 -> 5 -> 6

6-ая страница - это всплывающее окно, созданное с помощью Rg.plugin.popup.User, которое может перемещаться в этой иерархии столько раз, сколько раз. Но когда они достигают 6-й страницы, появляется кнопка. При нажатии на кнопку он должен перейти пользователя на 2-ю страницу. Как я могу удалить все страницы т.е. 3,4,5 из стека и перейдите на 2-ю страницу.

Что я пробовал

при нажатии кнопки:

for (var i = 1; i < countPagesToRemove; i++)
{
    Navigation.RemovePage(Navigation.NavigationStack[Navigation.NavigationStack.Count - 2]);
}
await Navigation.PopAsync();

Эта ссылка задает тот же вопрос, но он не работает для меня.

Тогда я попробовал вот так

await PopupNavigation.Instance.PopAsync();
Application.Current.MainPage = new NavigationPage(new NCDashboard());

Он перейдет на 2-ю страницу, но не будет отображать кнопку «Назад» на первой странице из-за отсутствия стека. Так как я могу решить эту проблему? Любая помощь приветствуется.

Всего 2 ответа


Вы вызываете RemovePage с 6-й страницы, которая называется Rg.Popups PopupPage. Как мы уже обсуждали в комментариях, Rg.Popups PopupPage не помещается в тот же стек, что и обычные страницы Xamarin.Forms. Вам нужно получить ссылку на стек, где находятся страницы с 1-го по 5-й, и выполнить на нем RemovePage. Попробуйте следующий обходной путь:

    var mainPage = (Application.Current.MainPage as NavigationPage);
    for (var i = 1; i < countPagesToRemove; i++)
    {

     mainPage.Navigation.RemovePage(mainPage.Navigation.NavigationStack[mainPage.Navigation.NavigationStack.Count - 2]);
    }
    await Navigation.PopAsync();

Обновлено:

Код на странице 6 работает хорошо.

    protected override void OnAppearing()
    {
        base.OnAppearing();
        for (var i = 1; i <= 3; i++)
        {
            Navigation.RemovePage(Navigation.NavigationStack[Navigation.NavigationStack.Count - 1]);
        }
    }
    private async void Button_Clicked(object sender, EventArgs e)
    {                    
        await PopupNavigation.PopAsync();
    }

введите описание изображения здесь


Есть идеи?

10000