MAUI WinUI3 Windows应用默认标题栏不随文本大小调整问题
问题
我正在开发Windows平台的MAUI应用,需要设置UI元素的顶部内边距以避免与标题栏重叠,为此编写了如下计算标题栏高度的函数:
[DllImport("uxtheme.dll", CharSet = CharSet.Auto)] public static extern int GetThemeSysSize(IntPtr hTheme, int iSizeId); public const int SM_CXFIXEDFRAME = 7; public const int SM_CYCAPTION = 4; public int TitleBarHeight(){ IntPtr hTheme = IntPtr.Zero; // 使用Windows默认主题 int titleBarHeight = GetThemeSysSize(hTheme, SM_CYCAPTION); int titleBarBorderSize = GetThemeSysSize(hTheme, SM_CXFIXEDFRAME); return requiredTitleBarPadding = titleBarHeight + titleBarBorderSize; }
该函数在100%文本大小下返回32,225%文本大小设置下返回51,符合其他默认窗口的标题栏高度表现。100%文本大小时,测试MAUI应用与GitBash窗口的标题栏高度一致;但设置为225%时,GitBash标题栏正常调整,MAUI应用的标题栏高度却无变化。
请问这是设置问题,还是MAUI/WinUI3默认不支持该适配?是否必须为Windows版本应用创建自定义标题栏才能解决此问题?我未找到禁用默认行为的相关设置。
解答
- 这不是设置问题,MAUI基于的WinUI3默认标题栏本身不支持自动适配系统文本缩放比例。WinUI3默认标题栏高度为固定值,不会随系统文本缩放动态调整,这和GitBash这类传统Win32应用的行为存在差异。
- 目前解决该问题必须创建自定义标题栏。通过自定义标题栏,你可以完全掌控标题栏的尺寸与样式,还能根据
TitleBarHeight()计算出的数值动态调整高度,同步适配UI元素的顶部内边距。 - 无需禁用默认行为,直接替换即可:在Windows平台MAUI项目中,通过
AppWindow.TitleBar获取默认标题栏实例,设置ExtendsContentIntoTitleBar = true,之后自定义标题栏布局控件,将其高度设为计算出的数值,最后把顶部UI元素的内边距绑定到该高度值即可。
内容的提问来源于stack exchange,提问作者AronK
相关产品推荐
相关产品推荐

