不使用Shell,如何在.NET MAUI中实现页面导航?
.NET MAUI 不使用Shell时的页面导航实现
背景说明
之前使用Shell时,你通过以下代码实现页面导航:
App.ApplicationShell.PushAsync(new SomePage());
现在移除Shell后,需要调整导航逻辑,以下是具体实现方案:
步骤1:修改App类,设置NavigationPage作为根页面
不使用Shell时,需要将初始页面包装进NavigationPage(MAUI原生的导航容器),修改后的App类代码如下:
public partial class App : Application { public App() { InitializeComponent(); // 将初始页面SomePage包装为NavigationPage的根页面 MainPage = new NavigationPage(new SomePage()); } }
步骤2:页面内导航调用
在任意页面的代码中,直接通过Navigation属性调用导航方法:
// 推入新页面(普通层级导航) await Navigation.PushAsync(new TargetPage()); // 推入模态页面(弹窗式导航) await Navigation.PushModalAsync(new ModalPage()); // 返回上一页 await Navigation.PopAsync(); // 关闭模态页面 await Navigation.PopModalAsync();
步骤3:全局导航调用(可选)
如果需要在非页面类中全局触发导航,可以给App类添加静态导航入口:
public partial class App : Application { // 全局可访问的导航实例(判空避免空引用) public static INavigation? GlobalNavigation => Current?.MainPage?.Navigation; public App() { InitializeComponent(); MainPage = new NavigationPage(new SomePage()); } }
调用方式:
// 全局推入新页面 await App.GlobalNavigation?.PushAsync(new TargetPage());
额外说明
- 如果不需要显示顶部导航栏,可以在
NavigationPage初始化时设置:
或者在目标页面的构造函数中单独隐藏:MainPage = new NavigationPage(new SomePage()) { BarBackgroundColor = Colors.Transparent, BarTextColor = Colors.Black };NavigationPage.SetHasNavigationBar(this, false);
内容的提问来源于stack exchange,提问作者Thomas Carlton
相关产品推荐
相关产品推荐

