.NET MAUI Shell 导航

.NET MAUI Shell 是一种基于URI的导航体验,可以使用路由导航到应用中的任何页面,而无需遵循设置的导航层次结构;也可以向后导航,不必访问导航堆栈上的所有页面。

.NET MAUI Shell 中的路由可以在FlyoutItem、TabBar、Tab和ShellContent对象上通过Route属性定义。

也可以在Shell子类的构造函数或其他任何在调用路由之前运行的位置显式注册额外的路由,例如详情页等不在Shell可视层次结构中的页面。

.NET MAUI Shell 中执行导航是通过调用Shell类的GoToAsync方法,并指定一个URI来实现。.

URI可以包含三个组件:一个路由、一个页面和一个或多个查询参数。当导航即将执行时,会触发Navigating事件,当导航完成时,会触发Navigated事件。

举例,有以下几个步骤:

  • 在Shell、FlyoutItem、TabBar、Tab和ShellContent对象上定义Route属性,来创建视觉层次结构中的路由。例如:

<Shell ...>
 <FlyoutItem ... Route="animals">
  <Tab ... Route="domestic">
   <ShellContent ... Route="cats" />
   <ShellContent ... Route="dogs" />
  </Tab>
  <ShellContent ... Route="monkeys" />
  <ShellContent ... Route="elephants" />
  <ShellContent ... Route="bears" />
 </FlyoutItem>
 <ShellContent ... Route="about" />
</Shell>
  • 在Shell子类的构造函数或其他位置中,使用Routing.RegisterRoute方法为不在视觉层次结构中表示的页面显式地注册路由。

    例如:

Routing.RegisterRoute("monkeydetails", typeof(MonkeyDetailPage));
Routing.RegisterRoute("beardetails", typeof(BearDetailPage));
  • 使用Shell.Current.GoToAsync方法执行导航,指定要导航到的URI。例如:

await Shell.Current.GoToAsync("//animals/domestic/dogs"); //绝对路由
await Shell.Current.GoToAsync("monkeydetails"); //相对路由
await Shell.Current.GoToAsync("../route"); //向后导航
  • 可以在导航URI中添加查询参数,来传递数据给目标页面。例如:

await Shell.Current.GoToAsync("monkeydetails?name=sun&sex=male");

希望这些信息对你有用!