xamarin - 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)
解决方案
对于那些仍在寻找答案的人,Damir's Corner的答案
await Shell.Current.GoToAsync($"///{tag}", false); //Checks the Navigation Stack Downward
上面的代码检查当前的导航堆栈,并向下搜索(或导航堆栈内部)的路由标记,然后用找到的路由替换整个堆栈。
希望这对那些寻找答案的人有所帮助。
推荐阅读
- python - Django form.is_valid() 返回 False
- django - --View 处的 ValueError 未返回 HttpResponse 对象。它返回 None 而不是
- javascript - 在高图表堆叠条形图中的对象中存在空值的情况下,图表中的显示空间
- javascript - 如何在大表中定义列大小(368 列)
- azure - 在多个进程中使用来自 Azure 服务总线的消息
- spring - 如果未注入其组件类,则不会执行 Spring Scheduler
- javascript - 如何从终端运行 esnext 文件
- postgresql - 如何在全文字段PostgreSQL中保存带有斜杠的注册号?
- c# - 当 Items Control 元素发生变化时如何处理?WPF, C#
- c# - MessagePackObject 不是属性类。这是正确的,反编译表明它不是