【问题标题】:Xamarin Shell hierarchy with child pageXamarin Shell 层次结构与子页面
【发布时间】:2021-04-23 21:32:48
【问题描述】:

我在 Xamarin Shell v5 应用程序中指定了一个简单的页面结构。我有一个带有以下结构的弹出项的弹出项:

<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent>
    <local:MainPage...
</ShellContent>
<ShellContent>
    <local:Page1...
</ShellContent>
<ShellContent>
    <local:Page2...
</ShellContent>
</FlyoutItem>

当我启动应用程序时,MainPage 显示为默认值。到目前为止一切顺利。

浮出控件显示三个页面。也不错。

当我点击 Page2 弹出按钮时,那个页面会显示出来。但是没有创建导航堆栈,这意味着它还会显示汉堡菜单(而不是汉堡图标所在的后退按钮)。

我想让 Page2 成为“子页面”(导航方面),这样当用户点击 Page2 弹出按钮时,顶部会显示一个返回按钮,以便用户返回主页。

我一直在前后阅读文档,但无法弄清楚如何在可视外壳层次结构中执行此操作。 我认为它与路由有关,但我不确定如何指定路由,以便 Page2 成为“子页面”(或任何单词)。

有人知道怎么做吗?这适用于 iOS 和 Android。

我不希望标签显示在屏幕底部,就像我在许多示例中看​​到的那样。只是一个整洁、干净的弹出菜单。

【问题讨论】:

  • 我知道我可以改用菜单项,并且在每个菜单项的回调中我可以调用Shell.Current.GoToAsync(.....),它会通过正确的路线将页面推送到导航堆栈上。我可能只需要这样做,但我很好奇这是否可以单独使用 flyoutitems 来完成。

标签: c# xaml xamarin xamarin.forms xamarin.forms.shell


【解决方案1】:

如果页面仍处于 Shell 分层结构中(FlyoutItem 中的 page2),则始终显示汉堡图标。

您可以使用下面的代码来注册 Shell 视觉层次结构中不存在的页面。然后当您导航到这些页面时,您可以使用返回按钮返回。

 Routing.RegisterRoute("page2", typeof(Pages));

导航:

await Shell.Current.GoToAsync("page2");

【讨论】:

  • 是的,调用 GoToAsync() 会创建一个导航堆栈。问题是我如何在 Shell Visual Hierarchy 中执行页面嵌套。
  • 页面的嵌套是什么意思?你的意思是在Shell Visual Hierarchy的页面中嵌套一个没有任何导航的页面?
  • 显示:线性,即在垂直列表中一页接一页。在 xaml(视觉层次结构)中:不在乎。点击时导航:第 2 页被添加到导航堆栈。如果我调用 Shell.Current.GoToAsync 它被 添加 到导航堆栈。如果我点击它,则会创建一个新的导航堆栈。我想(如果可能的话)以某种方式在 shell 视觉层次结构中声明当我点击页面时应该将页面 添加 到导航堆栈中。我希望这是有道理的。喜欢(伪 xaml)...
  • Shell模板的特殊功能是使用路由导航到应用程序中的任何页面。为什么要避免这种情况?使用其他模板怎么样?
  • 我不想避免它 :-) 我交换了 FlyoutItems,我现在改用 MenuItems。在他们各自的回调中,我调用 Shell.Current.GoToAsync(""),最后它 看起来 像 FlyoutItems,但 表现 像我想要的一样(打开一个 '子页面)。当子页面打开时,我可以通过点击后退箭头按钮来导航。问题已解决,尽管通过使用菜单项而不是弹出项的解决方法。
【解决方案2】:

最后我通过使用 MenuItems 而不是 FlyoutItems 解决了这个问题。在每个 MenuItem 的回调中,我调用 Shell.Current.GoToAsync("");,它将页面作为 child 打开,即可以执行后退导航。 而且由于菜单项可以设置样式(就像弹出项一样),它在设备上看起来不错。这是一种解决方法,但我很满意。

【讨论】:

  • 感谢分享。不要忘记接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多