.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
相关产品推荐
相关产品推荐

