从 Shell FlyoutItem 导航到下一级

Posted

技术标签:

【中文标题】从 Shell FlyoutItem 导航到下一级【英文标题】:Navigating from Shell FlyoutItem to one level down 【发布时间】:2020-09-09 13:33:29 【问题描述】:

我在 Shell 视图中有以下结构

<FlyoutItem Route="home" Title="Home">
  <ShellContent ContentTemplate="DataTemplate views:HomePage" />
</FlyoutItem>
<FlyoutItem Route="leaverequest" Title="Leave Request">
  <ShellContent ContentTemplate="DataTemplate views:LeaveRequestView" />
</FlyoutItem>

项目显示正确。 当我单击 Leave Request 项时,LeaveRequestView 会在顶部导航中打开一个汉堡菜单。我希望 LeaveRequestView 显示一个后退按钮。

我尝试在 ShellContent 中设置 Route 属性而不是 FlyoutItem 但结果是一样的。

在上面的路由定义中是否需要做一些事情,或者这是要在 LeaveRequestView XAML 中设置的属性?

PS:如果我使用 Shell.Current.GoToAsync("leaverequest") 在后面的代码中导航,则行为是正确的。我在顶部导航中看到了返回按钮。

【问题讨论】:

【参考方案1】:

很遗憾,它无法显示带有遵循定义的 XAML 的后退按钮。

<FlyoutItem Route="home" Title="Home">
  <ShellContent ContentTemplate="DataTemplate views:HomePage" />
</FlyoutItem>
<FlyoutItem Route="leaverequest" Title="Leave Request">
  <ShellContent ContentTemplate="DataTemplate views:LeaveRequestView" />
</FlyoutItem>

从上面的路由定义,我们不能让LeaveRequestView 显示一个后退按钮。

因为它是由 Xamarin Forms Shell 设计的。如果在 XAML 中使用FlyoutItem,则表示子视图将通过汉堡菜单导航。

正如您所说,除非使用Shell.Current.GoToAsync("leaverequest") 进行导航,否则将显示后退按钮。同时,你会看到汉堡菜单没有显示。

注意:这应该是Xamarin Forms FlyoutItem的典型特征。如果不需要此功能,则无需创建 Shell 应用程序。

【讨论】:

感谢您的解释。我使用 MenuItem 而不是 FlyoutItem 来达到预期的效果。 @PrashantGupta 很高兴你解决了这个问题!这将是一个很好的解决方案。您可以在答案中更新,如果回复有帮助,请不要忘记接受它作为答案(点击该答案左上角的✔),它将帮助有类似问题的其他人。

以上是关于从 Shell FlyoutItem 导航到下一级的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms Shell Flyout:如何消除 FlyoutHeader 和第一个 FlyoutItem 之间的间隙?

如何从一个单元格导航到下一个视图?

使用 edgePanning 从一个视图控制器导航到下一个视图控制器

在导航到下一个片段时在底部导航视图中打开警报对话框

获取位置后如何自动导航到下一个屏幕

Xamarin.FormsShell基础教程Shell相关类体系