PAYATHON 2026

.NET MAUI 如何调整 MenuBarItems 的高度和字体?

数据小许

结论

对于 ContentPage.MenuBarItems 中的 MenuBarItem 和 MenuFlyoutItem,没有通用的 XAML 属性可以跨平台统一设置菜单高度、字体大小或 FontAttributes。现有 XAML 可以定义菜单结构和文字,但不能像设置 Button 那样直接设置 HeightRequest、FontSize 或 FontAttributes。

菜单外观由目标平台的原生菜单实现决定,因此各平台支持的定制方式可能不同。

现有菜单 XAML

下面的结构用于声明菜单项:

<ContentPage.MenuBarItems>
    <MenuBarItem Text="Passwords">
        <MenuFlyoutItem Text="Create New Database" />
        <MenuFlyoutItem Text="Edit Curent Database" />
        <MenuFlyoutSeparator />
        <MenuFlyoutItem Text="Add Password" />
        <MenuFlyoutItem Text="Edit Password" />
        <MenuFlyoutItem Text="Delete Password" />
        <MenuFlyoutSeparator />
        <MenuFlyoutItem Text="Exit" />
    </MenuBarItem>
</ContentPage.MenuBarItems>

Text 用于设置菜单文字,但菜单项不是可以直接布局和设置字体的普通视图。因此,给 MenuBarItem 或 MenuFlyoutItem 添加 HeightRequest、FontSize 等属性,无法作为跨平台通用的样式方案。

需要统一控制外观时

如果需要指定菜单的高度、字体或字体属性,通常要用自定义界面替代内置菜单,并自行实现菜单的展开和关闭行为。例如,可以用普通 Button 作为顶部菜单入口,再配合弹出层或覆盖视图实现下拉内容:

<HorizontalStackLayout Spacing="8">
    <Button Text="Passwords"
            HeightRequest="44"
            FontSize="16"
            FontAttributes="Bold" />

    <Button Text="Groups"
            HeightRequest="44"
            FontSize="16"
            FontAttributes="Bold" />

    <Button Text="Options"
            HeightRequest="44"
            FontSize="16"
            FontAttributes="Bold" />
</HorizontalStackLayout>

这段代码只设置自定义菜单入口的外观,不会自动生成 MenuBarItem 的下拉菜单。下拉项、分隔线、子菜单和点击行为都需要在自定义界面中另行实现。HeightRequest 是布局请求值,最终尺寸仍可能受到父布局和平台布局的影响。

选择方式

  • 接受系统原生菜单外观:继续使用 MenuBarItems,维护现有菜单结构。
  • 需要跨平台统一控制尺寸和字体:改用自定义菜单界面。
  • 只需调整某个平台:可以评估该平台的原生定制方式,但这类实现通常依赖平台,不能假定在其他平台也有效。

备注:内容仅供参考。