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

.NET MAUI与.NET7 Blazor Hybrid应用启动全屏设置及代码修复咨询

解决.NET MAUI/.NET 7 Blazor Hybrid启动全屏问题

你的现有代码存在几个问题导致无法实现全屏:

  • 仅设置了固定窗口大小+居中,并非真正的全屏模式
  • Y轴位置计算错误(应该用-而非+,否则窗口会跑到屏幕外)
  • Activated事件可能触发多次,且时机不是启动时设置窗口状态的最佳时机

以下是针对不同场景的正确实现方案:

一、窗口铺满屏幕(非系统级全屏)

如果只是需要窗口占满整个屏幕显示(保留系统标题栏、任务栏),直接在CreateWindow方法中设置即可,无需依赖事件:

protected override Window CreateWindow(IActivationState activationState)
{
    var window = base.CreateWindow(activationState);
    var displayInfo = DeviceDisplay.Current.MainDisplayInfo;
    
    // 计算屏幕实际可用尺寸(转换为设备独立像素)
    var screenWidth = displayInfo.Width / displayInfo.Density;
    var screenHeight = displayInfo.Height / displayInfo.Density;

    // 设置窗口铺满屏幕
    window.Width = screenWidth;
    window.Height = screenHeight;
    window.X = 0;
    window.Y = 0;

    return window;
}

二、系统级全屏(隐藏标题栏、任务栏)

如果需要真正的沉浸式全屏(无标题栏、覆盖系统任务栏/状态栏),需针对不同平台做原生实现:

1. Windows平台

在Platforms/Windows/App.xaml.cs中修改OnLaunched方法:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    base.OnLaunched(args);
    
    var appWindow = Microsoft.UI.Xaml.Window.Current.AppWindow;
    // 切换到系统全屏模式
    appWindow.SetPresenter(Microsoft.UI.Windowing.AppWindowPresenterKind.FullScreen);
}

2. Android平台

在Platforms/Android/MainActivity.cs中修改OnCreate方法:

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    // 隐藏状态栏和导航栏
    Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen);
    // Android 11+ 沉浸式全屏适配
    Window.InsetsController?.Hide(WindowInsets.Type.StatusBars() | WindowInsets.Type.NavigationBars());
}

3. iOS平台

在Platforms/iOS/AppDelegate.cs中修改FinishedLaunching方法:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    // 隐藏状态栏
    UIApplication.SharedApplication.StatusBarHidden = true;
    // 设置窗口铺满整个屏幕
    var window = new UIWindow(UIScreen.MainScreen.Bounds);
    window.RootViewController = new UIViewController();
    window.MakeKeyAndVisible();
    return base.FinishedLaunching(app, options);
}

4. Mac Catalyst平台

在Platforms/MacCatalyst/AppDelegate.cs中修改FinishedLaunching方法:

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
    var window = UIApplication.SharedApplication.Windows.FirstOrDefault();
    window?.ToggleFullScreen(nil);
    return base.FinishedLaunching(application, launchOptions);
}

三、Blazor Hybrid适配说明

Blazor Hybrid基于MAUI框架构建,上述所有方案直接适用,无需额外修改Blazor组件或页面代码,只需在MAUI对应平台项目中配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:17:46