.NET MAUI Shell - 导航后显示汉堡图标

4
我有几个关于展示汉堡菜单图标(用于显示Flyout菜单)和返回到上一页的问题。
我在Visual Studio中创建了默认应用程序并添加了第二个页面。

enter image description here

我在AppShell.xaml.cs中注册了第二个页面

Routing.RegisterRoute(nameof(SecondPage), typeof(SecondPage));

在MainPage.xaml中,我添加了一个按钮,当用户按下按钮时,会跳转到第二个页面。
await Shell.Current.GoToAsync(nameof(SecondPage), true);

这一切都有效。但是,在第一页上,我们可以看到汉堡图标enter image description here
当从按钮点击进入第二页时,我们会看到一个返回按钮,而没有汉堡图标。

enter image description here

你仍然可以从左侧滑动以显示Flyout,但是我如何在第二个页面上显示汉堡图标? 我的第二个问题是,如果我在Flyout - AppShell.xaml中添加到第二页的链接。
<ShellContent
        Title="Second Page"
        ContentTemplate="{DataTemplate local:SecondPage}"
        Route="SecondPage" />

当被点击时,我们确实会看到汉堡图标。

enter image description here

但是没有返回按钮,如果您使用Android的“返回”按钮单击返回,则会退出应用程序。因此,我的第二个问题是:如何使菜单上的单击行为像单击按钮一样。

请问您想要实现什么功能?您可能想在第二页使用汉堡图标或者安卓的返回按钮,还是两者都需要? - Hongxin Sui-MSFT
对于第一个问题,汉堡包图标被替换为返回按钮,因为该页面作为导航页面而不是外壳内容页面进行反应。至于第二个问题,您无法在外壳内容上返回,因为它是单个页面而不是基于相同页面内容更改视图的导航页面。 - Sashi Kumar
这个链接对你很有帮助:https://learn.microsoft.com/zh-cn/dotnet/maui/fundamentals/shell/navigation。 - Sashi Kumar
你是否考虑在第二页添加一个单独的按钮来返回? - Hongxin Sui-MSFT
1
你的第二个页面是一个相对路径,它在导航栈中位于根页面之上。如果你不想这样,你需要修改你的代码,使得根页面被替换而不是添加到其他页面之上。这是 Shell 中预期的行为。 - Julian
显示剩余2条评论
1个回答

5
那是因为flyout采用绝对路由,而你的代码采用相对路由并保持导航堆栈。
如果要以编程方式获得相同的行为,则需要切换到绝对路由。
阅读更多关于Shell导航的内容,请参阅.NET MAUI文档

文档没有解释这个问题。如果绝对路由不可行(例如在弹出页面中的全局路由),那么似乎没有办法改变这种行为。 - thinkOfaNumber
System.Exception:“全局路由目前不能是堆栈上唯一的页面,因此不支持对全局路由的绝对路由。暂时只需导航到:SecondPage”...因此这个解决方案不起作用。 - nimitz
2
我发现为了实现保留汉堡菜单的正确导航,我不能使用Routing.RegisterRoute(),而是要在AppShell.xaml中的ShellContent元素内添加Route="SecondPage",然后使用await Shell.Current.GoToAsync("//SecondPage")进行导航,这样可以使用在AppShell.xaml中定义的结构。 - nimitz
@nimitz - 这应该是被接受的答案。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接