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

MAUI中Flyout的Tab在屏幕底部重复显示为按钮如何消除?

解决MAUI AppShell中Flyout与底部Tab重复显示的问题

方案1:保留Flyout侧边栏,隐藏底部Tab按钮

重复显示的原因是Tab控件默认会渲染底部导航栏,同时FlyoutItem又将这些Tab作为侧边栏项展示。要只保留Flyout,只需禁用底部Tab栏:

在Shell标签中添加Shell.TabBarIsVisible="False"属性,即可全局隐藏所有Tab的底部导航栏,同时Flyout侧边栏保持正常显示:

<Shell
    x:Class="OurApp.AppShell"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:OurApp"
    Shell.FlyoutBehavior="Flyout" 
    Shell.NavBarIsVisible="False"
    Shell.TabBarIsVisible="False"> <!-- 添加该属性 -->

    <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
        <Tab Title="Application" Route="application">
            <ShellContent Title="Login" Route="login" ContentTemplate="{DataTemplate local:Login}" />
            <ShellContent Title="About" Route="about" ContentTemplate="{DataTemplate local:About}" />
            <ShellContent Title="Exit" Route="exit" ContentTemplate="{DataTemplate local:Exit}" />
        </Tab>

        <Tab x:Name="ModulesTab" Title="Modules" Route="modules">
            <ShellContent Title="Receiving" Route="receiving" ContentTemplate="{DataTemplate local:Receiving}" />
            <ShellContent Title="Shipping" Route="shipping" ContentTemplate="{DataTemplate local:Shipping}" />
            <ShellContent Title="Putaway" Route="putaway" ContentTemplate="{DataTemplate local:Putaway}" />
        </Tab>
    </FlyoutItem>
</Shell>

如果只需隐藏特定Tab的底部栏,也可以单独给对应Tab标签添加Shell.TabBarIsVisible="False"属性。

方案2:保留底部Tab按钮,隐藏Flyout侧边栏

若想只保留底部Tab导航,只需将Shell.FlyoutBehavior设为Disabled,即可禁用Flyout侧边栏,仅显示底部Tab按钮:

<Shell
    x:Class="OurApp.AppShell"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:local="clr-namespace:OurApp"
    Shell.FlyoutBehavior="Disabled" <!-- 修改为Disabled -->
    Shell.NavBarIsVisible="False">

    <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
        <Tab Title="Application" Route="application">
            <ShellContent Title="Login" Route="login" ContentTemplate="{DataTemplate local:Login}" />
            <ShellContent Title="About" Route="about" ContentTemplate="{DataTemplate local:About}" />
            <ShellContent Title="Exit" Route="exit" ContentTemplate="{DataTemplate local:Exit}" />
        </Tab>

        <Tab x:Name="ModulesTab" Title="Modules" Route="modules">
            <ShellContent Title="Receiving" Route="receiving" ContentTemplate="{DataTemplate local:Receiving}" />
            <ShellContent Title="Shipping" Route="shipping" ContentTemplate="{DataTemplate local:Shipping}" />
            <ShellContent Title="Putaway" Route="putaway" ContentTemplate="{DataTemplate local:Putaway}" />
        </Tab>
    </FlyoutItem>
</Shell>

你也可以简化结构,直接将Tab作为Shell的子元素(去掉FlyoutItem),这样默认只会渲染底部Tab栏,无需额外设置Flyout行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:11:09