You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8升级后.NET Maui(Blazor Hybrid)应用标题栏复现问题

.NET 8 MAUI Blazor Hybrid Windows标题栏隐藏失效的解决方案

问题原因

.NET 8 对 MAUI Windows 平台的窗口初始化流程和API做了调整,原.NET 6中直接调用presenter.SetBorderAndTitleBar或nativeWindow.ExtendsContentIntoTitleBar的方式,因窗口Handler初始化时机变化,导致代码执行时窗口实例未完全就绪,从而失效。另外Shell.NavBarIsVisible="False"控制的是Shell框架的导航栏,和Windows系统级标题栏无关,所以不会生效。

修复步骤

在Platforms/Windows/App.xaml.cs的OnLaunched方法中,调整代码执行时机和API调用方式:

  1. 确保在base.OnLaunched(args)之后获取窗口实例,此时窗口Handler已完成初始化
  2. 使用.NET 8推荐的AppWindow API来控制标题栏

代码示例

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    base.OnLaunched(args);

    // 获取MAUI窗口对应的WinUI窗口实例
    var mauiWindow = Application.Current.Windows[0];
    if (mauiWindow?.Handler?.PlatformView is MauiWinUIWindow nativeWindow)
    {
        var appWindow = nativeWindow.AppWindow;
        
        // 方式1:直接隐藏标题栏
        appWindow.TitleBar.IsVisible = false;

        // 方式2:设置无边框窗口(同时隐藏标题栏和边框)
        var overlappedPresenter = OverlappedPresenter.CreateForBorderlessWindow();
        // 可选:保留窗口的最大化/最小化/关闭按钮需求
        overlappedPresenter.IsMaximizable = true;
        overlappedPresenter.IsMinimizable = true;
        overlappedPresenter.IsCloseable = true;
        appWindow.Presenter = overlappedPresenter;
    }
}

补充说明

  • 如果仍需要使用SetBorderAndTitleBar,需确保获取到正确的OverlappedPresenter实例,且在窗口初始化完成后调用:
if (appWindow.Presenter is OverlappedPresenter presenter)
{
    presenter.SetBorderAndTitleBar(false, false);
}
  • ExtendsContentIntoTitleBar仅在标题栏可见时生效,用于将内容延伸到标题栏区域,若要完全隐藏标题栏无需设置该属性。

内容的提问来源于stack exchange,提问作者jobrien9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:55:10