Shell.Current.GoToAsync()跳转异常:注册路由后页面无法切换
解决MAUI Shell路由跳转失败的问题
问题根源
你的代码存在几个关键问题导致跳转失效:
- 路由重复注册:AppShell的XAML里已经给
<ShellContent>设置了Route="MainPage",后台代码又重复注册MainPage路由,引发冲突。 - 子路由注册逻辑错误:嵌套路由
MainPage/MuseumListPage的注册方式不符合Shell路由的层级规则。 - 跳转路径写法错误:
//MainPage/MuseumListPage的绝对路径写法不匹配当前路由结构。
修复步骤
1. 移除重复的MainPage路由注册
修改AppShell后台代码,删掉重复的MainPage路由注册(XAML已完成该路由配置):
namespace MuseumFinder; public partial class AppShell : Shell { public AppShell() { InitializeComponent(); // 删除这行重复注册 // Routing.RegisterRoute(nameof(MainPage), typeof(MainPage)); // 正确注册子路由 Routing.RegisterRoute(nameof(MuseumListPage), typeof(MuseumListPage)); } }
2. 调整跳转路径写法
因为MainPage是当前Shell的活跃页面,直接用相对路径跳转即可:
private async void Button_Clicked(object sender, EventArgs e) { await Shell.Current.GoToAsync(nameof(MuseumListPage)); // 若要使用绝对路径,确保路由匹配后可写成:"//MainPage/MuseumListPage" }
3. 验证MuseumListPage的命名空间
如果MuseumListPage在MuseumFinder.Views命名空间下,需确保后台代码正确引用:
// 顶部添加命名空间引用 using MuseumFinder.Views; // 注册路由时使用正确的类型 Routing.RegisterRoute(nameof(MuseumListPage), typeof(MuseumListPage));
4. 额外排查项
- 查看调试输出窗口,MAUI会打印路由冲突、找不到目标页面的错误日志,快速定位问题。
- 确认按钮的
Clicked事件已正确绑定到Button_Clicked方法,XAML示例:
<Button Text="进入博物馆列表" Clicked="Button_Clicked"/>
内容的提问来源于stack exchange,提问作者John B
相关产品推荐
相关产品推荐

