Windows MAUI窗口最大化无法铺满顶部问题求助
.NET MAUI 8.0.0-preview4 全屏最大化窗口残留标题栏空白问题
问题现象
在.NET MAUI 8.0.0-preview4中实现窗口完全最大化时,原标题栏位置仍留有空白栏(红色为页面内容,黑色为残留的标题栏区域):
通过修改MAUI模板,用“Click me”按钮切换窗口最大化状态,代码如下:
private void OnCounterClicked(object sender, EventArgs e) { var window = Window.Handler.PlatformView as MauiWinUIWindow; var handle = WinRT.Interop.WindowNative.GetWindowHandle(window); var id = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(handle); var appWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(id); switch (appWindow.Presenter) { case Microsoft.UI.Windowing.OverlappedPresenter overlappedPresenter: if (overlappedPresenter.State == Microsoft.UI.Windowing.OverlappedPresenterState.Maximized) { overlappedPresenter.SetBorderAndTitleBar(true, true); overlappedPresenter.Restore(); } else { overlappedPresenter.SetBorderAndTitleBar(false, false); overlappedPresenter.Maximize(); } break; } }
已移除Shell,直接使用MainPage,但SetBorderAndTitleBar仅移除标题栏按钮,未真正消除标题栏空白,无法实现真正的全屏体验。
解决方法
1. 调整窗口扩展区域与布局边距
修改点击事件代码,结合TitleBar.ExtendsContentIntoTitleBar和设置标题栏高度,同时调整MAUI窗口内容边距:
private void OnCounterClicked(object sender, EventArgs e) { var window = Window.Handler.PlatformView as MauiWinUIWindow; var handle = WinRT.Interop.WindowNative.GetWindowHandle(window); var id = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(handle); var appWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(id); switch (appWindow.Presenter) { case Microsoft.UI.Windowing.OverlappedPresenter overlappedPresenter: if (overlappedPresenter.State == Microsoft.UI.Windowing.OverlappedPresenterState.Maximized) { // 恢复窗口时还原标题栏设置 overlappedPresenter.SetBorderAndTitleBar(true, true); var titleBar = appWindow.TitleBar; titleBar.ExtendsContentIntoTitleBar = false; overlappedPresenter.Restore(); window.ContentRoot.Margin = new Microsoft.UI.Xaml.Thickness(0); } else { // 最大化时隐藏边框和标题栏,让内容延伸覆盖原标题栏区域 overlappedPresenter.SetBorderAndTitleBar(false, false); var titleBar = appWindow.TitleBar; titleBar.ExtendsContentIntoTitleBar = true; titleBar.Height = 0; overlappedPresenter.Maximize(); window.ContentRoot.Margin = new Microsoft.UI.Xaml.Thickness(0); } break; } }
2. 确保页面无默认边距
检查MainPage的XAML,移除默认的Padding和Margin,确保内容铺满窗口:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MaximizeMaui.MainPage" Padding="0" Margin="0"> <!-- 页面内容 --> </ContentPage>
3. 可选:使用全屏演示者实现彻底全屏
如果需要覆盖任务栏的完全全屏效果,可切换到FullScreenPresenter:
private void OnCounterClicked(object sender, EventArgs e) { var window = Window.Handler.PlatformView as MauiWinUIWindow; var handle = WinRT.Interop.WindowNative.GetWindowHandle(window); var id = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(handle); var appWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(id); if (appWindow.Presenter.Kind == Microsoft.UI.Windowing.AppWindowPresenterKind.FullScreen) { // 退出全屏,还原为普通窗口 appWindow.SetPresenter(Microsoft.UI.Windowing.AppWindowPresenterKind.Overlapped); var overlappedPresenter = (Microsoft.UI.Windowing.OverlappedPresenter)appWindow.Presenter; overlappedPresenter.SetBorderAndTitleBar(true, true); var titleBar = appWindow.TitleBar; titleBar.ExtendsContentIntoTitleBar = false; } else { // 切换到全屏模式 appWindow.SetPresenter(Microsoft.UI.Windowing.AppWindowPresenterKind.FullScreen); } }
内容的提问来源于stack exchange,提问作者Aidan Bailey
相关产品推荐
相关产品推荐

