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

MAUI中WinUI平台无法设置应用标题栏及汉堡图标的背景颜色

MAUI中WinUI平台无法设置应用标题栏及汉堡图标的背景颜色

嘿,我来帮你搞定MAUI WinUI平台上标题栏和汉堡图标背景色的问题!

首先得说,你遇到的这个情况很常见——直接设置titleBar.BackgroundColor和titleBar.InactiveBackgroundColor没效果,是因为MAUI自带的标题栏模板把原生的标题栏样式给覆盖了,所以得从模板和控件样式入手调整。

你已经尝试修改./Platforms/Windows/App.xaml里MauiAppTitleBarContainerTemplate的Grid背景色,这一步是对的,能让大部分标题栏变成紫色,但汉堡菜单图标没跟上,是因为这个汉堡按钮属于NavigationViewToggleButton,它的默认样式并没有继承标题栏的背景色,只有当Flyout打开时,控件状态变化才会触发对应样式。

给你几个具体的解决步骤:

1. 单独设置汉堡按钮的背景样式

在WinUI项目的App.xaml里,添加一个针对NavigationViewToggleButton的样式,让它的背景色和标题栏保持一致:

<Style TargetType="NavigationViewToggleButton">
    <!-- 设置默认背景色为你的紫色资源 -->
    <Setter Property="Background" Value="{StaticResource IIT_Purple}" />
    <!-- 可选:设置图标颜色,避免和背景冲突 -->
    <Setter Property="Foreground" Value="White" />
    <!-- 可选:添加按下状态的背景色反馈 -->
    <Style.Triggers>
        <Trigger Property="IsPressed" Value="True">
            <Setter Property="Background" Value="{StaticResource IIT_Purple_Light}" />
        </Trigger>
    </Style.Triggers>
</Style>

2. 完善标题栏的非活动状态样式

如果需要标题栏在窗口非活动时也保持对应的紫色,还得给MauiAppTitleBarContainerTemplate加上视觉状态管理:

<DataTemplate x:Key="MauiAppTitleBarContainerTemplate">
    <Grid Background="{StaticResource IIT_Purple}">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="WindowStates">
                <VisualState x:Name="Active" />
                <VisualState x:Name="Inactive">
                    <VisualState.Setters>
                        <!-- 设置窗口非活动时的标题栏背景色 -->
                        <Setter Target="(Grid.Background)" Value="{StaticResource IIT_Purple_Inactive}" />
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
        <!-- 保留原有的标题栏内容 -->
    </Grid>
</DataTemplate>

3. 可选:结合原生标题栏代码设置

如果你想同时确保原生标题栏的属性也生效,可以在Windows项目的App.xaml.cs里补充代码(不过这一步可能会被MAUI模板覆盖,建议优先用上面的模板方法):

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    base.OnLaunched(args);
    var appWindow = Microsoft.UI.Xaml.Window.Current.AppWindow;
    var titleBar = appWindow.TitleBar;
    
    // 设置标题栏背景色
    titleBar.BackgroundColor = Microsoft.UI.Colors.Purple;
    titleBar.InactiveBackgroundColor = Microsoft.UI.Colors.DarkPurple;
    
    // 设置标题栏按钮的背景色
    titleBar.ButtonBackgroundColor = Microsoft.UI.Colors.Purple;
    titleBar.ButtonInactiveBackgroundColor = Microsoft.UI.Colors.DarkPurple;
}

这样调整后,标题栏的紫色背景就能完全覆盖,包括汉堡按钮的部分啦!

备注:内容来源于stack exchange,提问作者Danny Beckett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:18:02