MAUI Windows版本:如何移除标题栏并固定窗口尺寸为800x400像素及相关功能疑问
MAUI Windows应用:移除标题栏、固定窗口尺寸及相关问题解答
我来帮你搞定MAUI Windows端的这几个问题,针对正式版MAUI的可行方案如下:
一、移除标题栏并固定窗口尺寸(正式版MAUI方案)
正式版MAUI已经支持通过平台特定代码实现这些需求,不需要依赖旧版的兼容方案。你需要在Platforms/Windows/App.xaml.cs文件中修改OnLaunched方法,直接操作WinUI 3的窗口API:
using Microsoft.UI.Windowing; using Windows.Graphics; protected override void OnLaunched(LaunchActivatedEventArgs args) { base.OnLaunched(args); // 获取MAUI窗口对应的WinUI窗口实例 var winuiWindow = Application.Windows[0].Handler.PlatformView as Microsoft.UI.Xaml.Window; if (winuiWindow == null) return; var appWindow = AppWindow.GetFromWindow(winuiWindow); if (appWindow == null) return; // 1. 完全移除标题栏 appWindow.TitleBar.IsVisible = false; // 如果需要保留系统按钮但隐藏标题栏背景,可设置: // appWindow.TitleBar.ExtendsContentIntoTitleBar = true; // 2. 固定窗口尺寸为800x400 appWindow.Resize(new SizeInt32(800, 400)); // 禁用窗口调整大小功能 appWindow.Presenter = OverlappedPresenter.CreateForFixedSize(); }
注意:记得添加对应的命名空间引用,这段代码只会在Windows平台生效,不会影响其他平台的运行。
二、关于MAUI与WPF窗口控制差异的疑问
其实这是因为MAUI的底层实现逻辑和WPF不同:
- WPF是Windows专属框架,直接基于Windows的窗口体系,所以可以在XAML中直接设置
Window的各种属性; - MAUI是跨平台框架,Windows端底层使用的是WinUI 3而非WPF,为了保持跨平台API的统一性,MAUI没有将所有平台特有的窗口控制暴露到通用XAML中,而是需要通过平台特定代码来实现。
不过正式版MAUI已经完全支持窗口的各种控制(包括尺寸固定、标题栏定制、缩放禁用等),只是需要针对Windows平台单独编写代码,这也是跨平台框架的常见设计思路。
三、标题栏高度不协调的问题
如果是默认标题栏显示异常(高度大于按钮高度),大概率是因为标题栏的布局逻辑和自定义内容冲突。你可以通过自定义标题栏来解决这个问题,让系统按钮和标题栏高度匹配:
- 在
MainPage.xaml中添加自定义标题栏布局:
<Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!-- 自定义标题栏区域 --> <Grid x:Name="CustomTitleBar" Grid.Row="0" Background="{ThemeResource SystemControlBackgroundAccentBrush}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <!-- 自定义标题内容 --> <TextBlock Text="My MAUI App" VerticalAlignment="Center" Margin="12,0"/> <!-- 系统按钮容器 --> <Grid x:Name="TitleBarButtons" Grid.Column="1"/> </Grid> <!-- 主内容区域 --> <ScrollViewer Grid.Row="1"> <!-- 你的页面内容 --> </ScrollViewer> </Grid>
- 在
MainPage.xaml.cs中关联系统按钮到自定义标题栏:
#if WINDOWS using Microsoft.UI.Xaml; using Microsoft.UI.Windowing; #endif protected override void OnHandlerChanged() { base.OnHandlerChanged(); #if WINDOWS var winuiWindow = Application.Windows[0].Handler.PlatformView as Microsoft.UI.Xaml.Window; if (winuiWindow == null) return; var appWindow = AppWindow.GetFromWindow(winuiWindow); if (appWindow == null) return; // 开启标题栏内容扩展 appWindow.TitleBar.ExtendsContentIntoTitleBar = true; // 将自定义标题栏设置为窗口标题栏 winuiWindow.SetTitleBar(CustomTitleBar); // 调整系统按钮的垂直位置,使其居中显示 CustomTitleBar.Loaded += (s, e) => { TitleBarButtons.Margin = new Thickness(0, (CustomTitleBar.ActualHeight - 32) / 2, 0, 0); }; #endif }
这样就能让系统按钮和自定义标题栏高度保持一致,解决显示不协调的问题。
内容的提问来源于stack exchange,提问作者Ярослав Донецкий
相关产品推荐
相关产品推荐

