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

.NET MAUI如何仅在指定页面设置Flyout菜单

问题解决:MAUI Shell主页无法显示Flyout菜单

核心原因

你把Login和MainPage都直接作为Shell的顶级ShellContent,导致导航到MainPage时它处于Login的导航栈中,系统只会显示返回箭头而非Flyout菜单。Flyout菜单仅当页面属于FlyoutItem层级,且是导航栈的根页面时才会显示。

修复步骤

1. 调整AppShell结构

把MainPage放到一个FlyoutItem中,同时保持Login作为独立的顶级ShellContent(用于启动页):

<Shell
    x:Class="ReceptiUI.AppShell"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:ReceptiUI"
    Shell.FlyoutBehavior="Flyout">

    <!-- 登录页作为启动页,禁用Flyout -->
    <ShellContent
        Shell.FlyoutBehavior="Disabled"
        Title="Login"
        ContentTemplate="{DataTemplate local:Login}"
        Route="Login" />

    <!-- 主页及其他Flyout项 -->
    <FlyoutItem Title="Početna" Icon="home.png">
        <ShellContent
            Title="Početna"
            ContentTemplate="{DataTemplate local:MainPage}"
            Route="MainPage"/>
    </FlyoutItem>

    <FlyoutItem Title="Predjelo" Icon="breakfast.png">
       <ShellContent ContentTemplate="{DataTemplate local:Breakfast}"/>
    </FlyoutItem>
    <FlyoutItem Title="Glavno jelo" Icon="food.png">
        <ShellContent ContentTemplate="{DataTemplate local:Lunch}"/>
    </FlyoutItem>
    <FlyoutItem Title="Desert" Icon="dinner.png">
         <ShellContent ContentTemplate="{DataTemplate local:Dinner}"/>
    </FlyoutItem>
    <FlyoutItem Title="Meni" Icon="dinner.png">
        <ShellContent ContentTemplate="{DataTemplate local:ListaJela}"/>
    </FlyoutItem>
</Shell>

2. 修改登录后的导航方式

登录成功后,使用替换导航栈的方式跳转到MainPage,让它成为根页面:

// 登录按钮点击事件中
await Shell.Current.GoToAsync("//MainPage", true);

第二个参数true表示清除导航栈,这样MainPage就会成为栈的根,系统会显示Flyout菜单而非返回箭头。

3. 修复拼写错误

你最后一个FlyoutItem里的DataTemplatelocal:ListaJela少了空格,应该是DataTemplate local:ListaJela,这个错误会导致页面无法加载,顺便修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:50:50