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

如何在MAUI Shell中添加非启动页的FlyoutPage

MAUI 非根级FlyoutPage导航实现(从Xamarin MasterDetailPage迁移)

针对你从Xamarin迁移到MAUI的导航需求(主页→Page1→Page2→FlyoutPage,支持返回Page2后继续返回Page1或重新打开Flyout),以下是实现方案及参考资源:

核心实现思路

默认FlyoutPage通常作为根页面使用,但要实现层级导航,关键是保留导航栈并正确配置FlyoutBehavior:

  • 用PushAsync而非PushModalAsync导航到FlyoutPage,确保返回栈完整,从FlyoutPage返回时能回到Page2。
  • 自定义FlyoutPage,指定独立的侧滑栏页面(Flyout)和默认详情页(Detail),并设置FlyoutBehavior = FlyoutBehavior.Flyout保证侧滑功能正常。

代码示例

1. 自定义FlyoutPage

public class AppFlyoutPage : FlyoutPage
{
    public AppFlyoutPage()
    {
        // 配置侧滑栏页面
        Flyout = new FlyoutMenuPage();
        // 配置默认显示的详情页
        Detail = new FlyoutDefaultDetailPage();
        // 启用侧滑行为
        FlyoutBehavior = FlyoutBehavior.Flyout;

        // 绑定侧滑栏菜单点击事件,切换详情页
        ((FlyoutMenuPage)Flyout).OnMenuSelected += (selectedPageType) =>
        {
            Detail = (Page)Activator.CreateInstance(selectedPageType);
            IsPresented = false;
        };
    }
}

// 侧滑栏页面示例(ContentPage)
public class FlyoutMenuPage : ContentPage
{
    public event Action<Type> OnMenuSelected;

    public FlyoutMenuPage()
    {
        var menuList = new ListView();
        menuList.ItemsSource = new List<MenuItem>
        {
            new MenuItem { Title = "详情页1", TargetPageType = typeof(DetailPage1) },
            new MenuItem { Title = "详情页2", TargetPageType = typeof(DetailPage2) }
        };
        menuList.ItemSelected += (s, e) =>
        {
            if (e.SelectedItem is MenuItem item)
            {
                OnMenuSelected?.Invoke(item.TargetPageType);
            }
        };
        Content = menuList;
    }

    private class MenuItem
    {
        public string Title { get; set; }
        public Type TargetPageType { get; set; }
    }
}

2. Page2中导航到FlyoutPage

// 在Page2的按钮点击或其他触发事件中
private async void OpenFlyoutBtn_Clicked(object sender, EventArgs e)
{
    await Navigation.PushAsync(new AppFlyoutPage());
}

参考资源

GitHub示例

  • 官方MAUI示例仓库dotnet/maui-samples中的Navigation/FlyoutPageNavigation项目:基础展示了FlyoutPage的配置,可修改为层级导航场景,核心是保留导航栈的PushAsync调用。
  • 社区项目中搜索MAUI non-root FlyoutPage,很多开发者分享了自定义导航栈管理的实现,适配非根页面的Flyout导航需求。

视频教程

  • 查找MAUI进阶导航相关教程,重点关注「非根级FlyoutPage导航」「导航栈管理」主题,这类内容会详细演示如何在层级页面中嵌入FlyoutPage并维护返回路径。

内容的提问来源于stack exchange,提问作者TheRealEddieDean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:52:34