【MAUI】页面导航-await Shell.Current.GoToAsync()与Navigation.PushAsync()

[删除(380066935@qq.com或微信通知)]

更好的阅读体验请查看原文:https://blog.csdn.net/david_520042/article/details/128177371

await Shell.Current.GoToAsync()

Shell.Current.GoToAsync("..");  // 导航到前一页
Shell.Current.GoToAsync(nameof(NotePage));  // 导航到Note页
Shell.Current.GoToAsync($"{nameof(NotePage)}?{nameof(NotePage.ItemId)}={Value}");  // 导航到Note页并给Note页的ItemId变量赋值,需要标识NotePage类,如下两行
// [QueryProperty(nameof(ItemId), nameof(ItemId))]
// public partial class NotePage : ContentPage
注:需要在AppShell.cs的public AppShell()方法中注册此页面Routing.RegisterRoute(nameof(NotePage), typeof(NotePage)); // 注册页面 示例: ## Navigation.PushAsync() ```csharp await Navigation.PushAsync(new HelloXamlPage()); ``` ## 路由:(shell中配置)
Routing.RegisterRoute(nameof(TodoItemPage), typeof(TodoItemPage));

绝对路由

导航可以通过指定一个有效的绝对 URI 作为 GoToAsync 方法的参数来执行:

await Shell.Current.GoToAsync("//animals/monkeys");

本例导航到 monkeys 路由的页面,该路由在 ShellContent 对象上定义。 表示 monkeys 路由的 ShellContent 对象是其路由为 animals 的 FlyoutItem 对象的子对象。

相对路由

导航还可以通过指定一个有效的相对 URI 作为 GoToAsync 方法的参数来执行。 路由系统会尝试将 URI 匹配到 ShellContent 对象。 因此,如果应用中的所有路由都是唯一的,则只能通过将唯一路由名称指定为相对 URI 来执行导航。

支持下列相对路由格式:
route 将从当前位置向上搜索路由层次结构来获取指定的路由。 匹配的页面将被推送到导航堆栈。
/route 将在指定路由中从当前位置向下搜索路由层次结构。 匹配的页面将被推送到导航堆栈。
//route 将从当前位置向上搜索路由层次结构来获取指定的路由。 匹配的页面将替换导航堆栈。
///route 将从当前位置向下搜索路由层次结构来获取指定的路由。 匹配的页面将替换导航堆栈。

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

上下文导航

向后导航

向后导航可以通过将“…”指定为 GoToAsync 方法的参数来执行:

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

通过“…”执行的向后导航还可与路由结合使用:

await Shell.Current.GoToAsync("../route");

更多内容请看官方文档