WinUI 3开发:AppBar窗口按钮样式随焦点变化异常求助
WinUI3 标题栏按钮始终显示黑色的解决方案
现有代码与问题的相关性
RequestedTheme="Light":直接关联。应用主题会影响标题栏按钮的默认配色逻辑,当系统处于深色模式、应用设为浅色主题时,系统会自动调整按钮颜色以保证对比度,这就是你看到聚焦/失焦时颜色变化的核心原因之一。<MicaBackdrop Kind="Base"/>:间接关联。Mica背景的色调会参与系统对标题栏按钮颜色的对比度计算,可能导致聚焦时系统选择浅色按钮来适配背景。ExtendsContentIntoTitleBar = true:直接关联。开启该属性后,标题栏的样式控制权部分转移到应用,默认的按钮配色逻辑会和原生标题栏产生差异,加剧了颜色变化的问题。
实现按钮始终显示黑色的方法
通过手动控制标题栏按钮的前景色,并监听窗口激活状态,强制覆盖系统的自动配色逻辑:
代码实现
在窗口的构造函数及激活事件中添加以下代码:
using Microsoft.UI; using Microsoft.UI.Windowing; using Windows.UI; public LoginWindow() { this.InitializeComponent(); ExtendsContentIntoTitleBar = true; // 获取当前窗口的标题栏实例 var titleBar = AppWindow.TitleBar; // 设置所有状态下的按钮前景色为黑色 titleBar.ButtonForegroundColor = Colors.Black; titleBar.ButtonHoverForegroundColor = Colors.Black; titleBar.ButtonPressedForegroundColor = Colors.Black; titleBar.ButtonInactiveForegroundColor = Colors.Black; // 监听窗口激活状态变化,防止系统自动重置颜色 this.Activated += LoginWindow_Activated; } private void LoginWindow_Activated(object sender, WindowActivatedEventArgs args) { var titleBar = AppWindow.TitleBar; // 无论窗口是否聚焦,强制设置按钮前景色为黑色 titleBar.ButtonForegroundColor = Colors.Black; titleBar.ButtonInactiveForegroundColor = Colors.Black; }
说明
ButtonForegroundColor:控制窗口聚焦时的按钮颜色ButtonInactiveForegroundColor:控制窗口失焦时的按钮颜色ButtonHoverForegroundColor/ButtonPressedForegroundColor:控制按钮交互状态下的颜色,按需设置可保证交互时颜色一致
内容的提问来源于stack exchange,提问作者user26964933
相关产品推荐
相关产品推荐

