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
相关产品推荐
相关产品推荐

