【发布时间】:2022-01-15 17:52:43
【问题描述】:
我的 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)
【问题讨论】:
-
与official sample project的行为相同
-
您好,这似乎是正常现象。切换弹出项时,不会改变每个项的堆叠顺序。它需要用户手动操作。但是第二次,shell 可能会清除堆栈。
-
另外,如果使用
Shell.Current.GoToAsync,下一页将不会显示FlyoutIcon菜单。因此,您可以从 PageC 分享如何使用弹出菜单导航到历史记录的代码。 -
@Craig 但是,我找不到一种方法来覆盖 flayout 项目的单击事件。也许您可以在 Github here 中提交功能请求。然后会有来自微软的工程师来了解需求。如果他们接受此功能请求,他们将在下一版本的 xamrin 表单中更新此功能。如果您已提交,请记得在此处分享链接。我也会在那里跟进。
-
@JuniorJiang-MSFT 是的,我会为此提交功能请求,完成后我会分享链接。感谢您的帮助。
标签: xamarin xamarin.forms