MAUI Shell 路由导航通过 GoToAsync 实现,需先注册路由(如 Routing.RegisterRoute("detail", typeof(DetailPage))),支持绝对导航("//detail")、参数传递("detail?id=123")及 QueryProperty 自动绑定,返回用 ".." 而非 PopAsync。

MAUI Shell 中的路由导航主要通过 GoToAsync 方法实现,它基于 Shell 的 URI 路由系统,无需手动管理页面生命周期或导航堆栈,使用起来简洁高效。
Shell 路由注册是前提
在使用 GoToAsync 前,必须先为页面注册路由。通常在 AppShell.xaml.cs 的构造函数中完成:
- 用
Routing.RegisterRoute("detail", typeof(DetailPage));注册命名路由 - 路由名(如
"detail")是后续跳转的“地址”,不依赖页面路径或类名 - 支持嵌套路由,比如
"products/detail",需确保层级与 Shell 结构匹配(如 TabBar/ShellContent)
GoToAsync 基本用法
GoToAsync 是 IAsyncCommand 或页面代码中常用的异步导航方法,调用方式如下:
-
await Shell.Current.GoToAsync("detail");—— 跳转到已注册的路由 -
await Shell.Current.GoToAsync("//detail");—— 使用双斜杠表示绝对导航(清空导航堆栈,类似 Replace) -
await Shell.Current.GoToAsync("detail?id=123&name=test");—— 带查询参数,会在目标页的OnNavigatedTo中接收
在目标页接收参数
被导航的目标页面需继承 ContentPage 并重写 OnNavigatedTo 方法:
- 参数会以键值对形式出现在
ShellNavigationState.QueryString中 - 推荐用
QueryProperty特性自动绑定(更安全、更简洁):
[QueryProperty(nameof(ItemId), "id")]
public partial class DetailPage : ContentPage
{
public string ItemId { get; set; }
}登录后复制
框架会在导航时自动解析 URL 中的 id=123 并赋值给 ItemId 属性。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~