.NET MAUI+Prism中TabbedPage跳转后导航栈为空、无返回按钮
问题分析
在Prism MVVM的.NET MAUI项目中,TabbedPage的子页面(如DashboardPage)并不属于应用的主导航栈,它只是TabbedPage的Tab内容项。当直接从子页面调用NavigateAsync导航时,导航操作会在子页面的独立上下文执行,而子页面不在主导航栈中,导致新页面(TestListPage)成为新的导航根,因此没有导航栏、返回按钮,且NavigationStack计数为0。
解决方案
提供两种可行的解决方式,根据项目需求选择:
方式一:将TabbedPage包裹在NavigationPage中导航
修改导航至TabbedPage的代码,把HomePage(TabbedPage)放在NavigationPage中,让NavigationPage作为导航栈的容器:
await _navigationService.NavigateAsync($"{nameof(NavigationPage)}/{nameof(HomePage)}?{KnownNavigationParameters.SelectedTab}={nameof(DashboardPage)}");
此时DashboardPage的导航上下文会继承自NavigationPage,后续直接调用原导航代码即可正常显示导航栏和返回按钮:
await _navigationService.NavigateAsync(nameof(TestListPage));
方式二:使用相对路径导航到主导航栈
如果不需要用NavigationPage包裹TabbedPage,可在DashboardPage的视图模型中使用相对路径,回到TabbedPage所在的导航级别再导航:
await _navigationService.NavigateAsync($"../{nameof(TestListPage)}");
../表示回到上一级导航上下文(即TabbedPage所在的主导航栈),这样TestListPage会被推入主导航栈,自动生成导航栏和返回按钮。
额外检查
确保TestListPage的XAML中没有手动关闭导航栏,即未设置NavigationPage.HasNavigationBar="False",默认该属性为True。
内容的提问来源于stack exchange,提问作者steve
相关产品推荐
相关产品推荐

