如何在Xamarin Forms导航中超过1页PopAsync?

时间:2014-07-21 00:06:50

标签: xamarin xamarin.forms

在我的应用程序中,我使用NavigationPage推送页面,在某个阶段我想回到堆栈中的上一页。这是我的结构:

NavigationPage>第1页>第2页>第3页>第4页

我怎样才能PopAsync直接从Page4回到Page2而不经过Page3?

6 个答案:

答案 0 :(得分:28)

如果你有一个想要弹出的计数,这个效果非常好。

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

答案 1 :(得分:2)

我试图做同样的事情 - 我所做的事情有点像黑客,但确实有效,并保持第2页的后退按钮转到第1页。

基本上,

print "Select the action you want to perform(A or B)"
print "(A) uppper case"
print "(B) count number of lines"

option = raw_input("Enter your option(A or B):")

if option.upper() == "A":
    for line in x:
        line = line.upper()

    print line


elif option.upper() == "B":
    for line in x:
        line = line.upper()
        count = count + 1
    print "total lines:", count

else:
    print "incorrect option"
    exit()

首先,如果存在,删除第3页。现在它已经消失了,它就会弹出,而你又回到了第2页。

答案 2 :(得分:0)

如果你有一个想要弹出的计数,这对我来说非常有效。


    for(i=1; i < size; i++)
    {
    if (Device.OS == TargetPlatform.Android)
        {
            Navigation.RemovePage(Navigation.NavigationStack[Navigation.NavigationStack.Count - 1]);
        }
        else
        {
            Navigation.RemovePage(Navigation.NavigationStack[Navigation.NavigationStack.Count - 2]);
        }
    }
    await Navigation.PopAsync();

答案 3 :(得分:0)

我找到了一个解决方案,只要您有参考,就可以返回到特定页面:

protected async Task PopToPage(Page destination)
{
    if (destination == null) return;

    //First, we get the navigation stack as a list
    var pages = Navigation.NavigationStack.ToList();

    //Then we invert it because it's from first to last and we need in the inverse order
    pages.Reverse();

    //Then we discard the current page
    pages.RemoveAt(0);

    foreach (var page in pages)
    {
        if (page == destination) break; //We found it.

        toRemove.Add(page);
    }

    foreach (var rvPage in toRemove)
    {
        navigation.RemovePage(rvPage);
    }

    await Navigation.PopAsync();
}

答案 4 :(得分:0)

这对我来说非常有效:

我设置了一个计数器并抛出了一个 DisplayAlert 来找出我需要删除多少页

var x = Navigation.NavigationStack.Count();
DisplayAlert("Page Count", x.ToString(), "OK");

然后用它来删除我需要回退的数字。

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

答案 5 :(得分:0)

只需删除 2 页

Application.Current.MainPage.Navigation.RemovePage(Application.Current.MainPage.Navigation.NavigationStack[Application.Current.MainPage.Navigation.NavigationStack.Count - 2]);
            Application.Current.MainPage.Navigation.PopAsync();

在 Visual Studio 2019 Enterprise 中运行良好