如果我从Shell菜单项导航到其他页面,那么我可以选择再次打开拉出菜单。如果我从里面的代码转到页面,那么左上角的菜单按钮就不在了。
await Shell.Current.GoToAsync("step");
如何从代码中打开页面,打开页面中的shell菜单按钮是什么?
如果导航到作为Shell视觉层次结构的一部分存在的页面,并按如下方式注册路由。
<ShellContent
Title="Page1"
ContentTemplate="{DataTemplate local:Page1}"
Icon="tab_about.png"
Route="about" />
它可以使用如下参数进行导航。
await Shell.Current.GoToAsync("//about");
当你导航时,汉堡图标仍然会在那里。
如果导航到Shell视觉层次结构中不存在的页面,并使用Routing.RegisterRoute
进行注册,它将覆盖所有页面,汉堡图标将不会显示。但是你可以通过左上角的后退按钮返回到Shell。
Routing.RegisterRoute("step", typeof(Page2));
编辑队列总是满的!以下是我对Wendy答案的扩展:
TLDR:
本质上,Hamburger Nav仅在添加或注册到Shell或其子BaseShellItem
之一的页面上可见,并且因此是Shell视觉层次结构的一部分->如果该页面是通过AppShell.xaml注册的(也可以通过编程方式添加(,则该页面将被添加到BaseShellItem
中,并且是Shell Visual Hierarchy的一部分。
有几种方法可以注册页面进行导航,并确定页面是否显示汉堡:
- 如果通过AppShell.xaml注册页面,如:
<ShellContent
Title="This is Page1"
ContentTemplate="{DataTemplate local:Page1}"
Icon="tab_about.png"
Route="Page1" />
您可以使用如下参数进行导航。
await Shell.Current.GoToAsync("//Page1");
当您进行导航时,汉堡包图标仍然存在,因为页面已添加到BaseShellItem
(BaseShellItem
->ShellContent
(。
- 如果不是在
AppShell.xaml
中而是通过Routing
注册页面:
Routing.RegisterRoute(nameof(page1), typeof(Page1));
并导航到该页面,它将覆盖所有页面,汉堡图标不会显示,因为它没有添加到BaseShellItem
中。但您可以使用左上角的后退按钮返回Shell。
- 您可以通过将页面添加到
BaseShellItem
来注册页面(从Xamarin.Forms 5开始(,但不会在Shell的菜单中显示页面,并通过将页面作为AppShell.xaml
中的FlyoutItem
添加并使用FlyoutItemIsVisible="False"
来使页面具有汉堡包导航菜单:
<FlyoutItem
Title="Stat Page"
FlyoutItemIsVisible="False"
IsEnabled="True">
<ShellContent
Title="Page1"
ContentTemplate="{DataTemplate local:Page1}"
Icon="tab_about.png"
Route="about" />
</FlyoutItem>