首页 > 解决方案 > Xamarin Forms Shell - 导航到旧导航堆栈而不是弹出页面

问题描述

我的 Xamarin Forms Shell 应用程序出现问题。我不确定这是错误还是预期的行为,有人可以指出我正确的方向。

我在 Visual Shell Hierarchy 中有一个包含 2 页的应用程序:

搜索历史记录

<FlyoutItem Title="Search" Icon="search.png">
    <Tab Title="Search">
        <ShellContent Route="searchpage">
            <views:SearchPage />
        </ShellContent>
    </Tab>
</FlyoutItem>
<FlyoutItem Title="History" Icon="history.png">
    <Tab Title="History">
        <ShellContent>
            <views:HistoryPage />
        </ShellContent>
    </Tab>
</FlyoutItem>

还有几个页面(我们称它们为 PageA、PageB 和 PageC)是这样注册的:

Routing.RegisterRoute("PageA", typeof(PageA));    
Routing.RegisterRoute("PageB", typeof(PageB));    
Routing.RegisterRoute("PageC", typeof(PageC)); (Oops, I should probably use nameof here)

无论如何,我从搜索页面开始并导航到 PageA,如下所示:

Shell.Current.GoToAsync("PageA");

因为 PageA 不在视觉层次结构中,所以这给了我一个像这样的导航堆栈:

"//searchpage/PageA"

使用相同的相对导航方法,我导航到 PageB 然后是 PageC,所以我的导航堆栈是这样的:

"//searchpage/PageA/PageB/PageC"

从 PageC,我使用弹出菜单导航到历史,历史页面打开正常。

现在在历史页面上,我再次使用弹出菜单并单击“搜索”选项卡

但是我没有按预期进入搜索页面,而是返回到 PageC(返回到我之前的导航堆栈)。

如果我再次使用弹出菜单并单击“搜索”选项卡,则从此页面 (PageC) 可以正确导航到“搜索”页面。

当我从浮出控件中选择“搜索”选项卡时,这应该如何工作以及如何阻止它导航到 PageC?

谢谢

(ps - 我目前正在使用 Xamarin Forms 4.7)

标签: xamarinxamarin.forms

解决方案


对于那些仍在寻找答案的人,Damir's Corner的答案

await Shell.Current.GoToAsync($"///{tag}", false); //Checks the Navigation Stack Downward

上面的代码检查当前的导航堆栈,并向下搜索(或导航堆栈内部)的路由标记,然后用找到的路由替换整个堆栈。

希望这对那些寻找答案的人有所帮助。


推荐阅读