You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:50:45