如何在.NET MAUI Blazor组件应用中禁用还原按钮并强制窗口最大化
.NET MAUI Blazor:禁用窗口还原按钮并强制最大化启动
要实现Windows和Mac Catalyst平台上禁用还原按钮、强制应用最大化启动的需求,需要针对两个平台分别编写平台特定代码——因为窗口管理API是平台独有的。以下是具体实现步骤:
Windows平台实现
在Windows平台,我们需要借助Win32 API修改窗口样式,同时通过WinUI的窗口API设置启动状态:
- 打开项目中
Platforms/Windows/App.xaml.cs文件,修改OnLaunched方法:
using System.Runtime.InteropServices; using WinRT.Interop; namespace YourAppName.Windows; public partial class App : MauiWinUIApplication { protected override void OnLaunched(LaunchActivatedEventArgs args) { base.OnLaunched(args); // 获取MAUI窗口对应的WinUI窗口实例 if (Application.Current.Windows.FirstOrDefault()?.Handler?.PlatformView is Microsoft.UI.Xaml.Window window) { // 强制窗口启动时最大化 window.WindowState = Microsoft.UI.Xaml.WindowState.Maximized; window.ExtendsContentIntoTitleBar = false; // 获取窗口句柄,修改窗口样式 IntPtr hwnd = WindowNative.GetWindowHandle(window); int currentStyle = GetWindowLong(hwnd, GWL_STYLE); // 移除最大化框、最小化框和可调整大小的样式,彻底禁用还原操作 SetWindowLong(hwnd, GWL_STYLE, currentStyle & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX & ~WS_THICKFRAME); } } // 引入Win32 API函数 [DllImport("user32.dll")] private static extern int GetWindowLong(IntPtr hwnd, int nIndex); [DllImport("user32.dll")] private static extern int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong); // 窗口样式常量 private const int GWL_STYLE = -16; private const int WS_MAXIMIZEBOX = 0x10000; private const int WS_MINIMIZEBOX = 0x20000; private const int WS_THICKFRAME = 0x40000; }
说明:通过移除WS_MAXIMIZEBOX和WS_THICKFRAME样式,窗口将无法被调整大小,且最大化状态下不会显示还原按钮;如果需要保留最小化按钮,可删除& ~WS_MINIMIZEBOX部分。
Mac Catalyst平台实现
Mac Catalyst基于UIKit,需要获取底层的NSWindow实例来修改窗口属性:
- 打开项目中
Platforms/MacCatalyst/AppDelegate.cs文件,修改FinishedLaunching方法:
using AppKit; using UIKit; namespace YourAppName.MacCatalyst; [Register("AppDelegate")] public class AppDelegate : MauiUIApplicationDelegate { public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) { base.FinishedLaunching(application, launchOptions); // 获取主窗口及对应的NSWindow实例 if (UIApplication.SharedApplication.KeyWindow?.WindowScene?.Windows.FirstOrDefault() is NSWindow nsWindow) { // 强制窗口最大化 nsWindow.Zoom(null); // 修改窗口样式:禁用调整大小、最小化(可选),锁定窗口尺寸 nsWindow.StyleMask &= ~NSWindowStyle.Resizable; nsWindow.StyleMask &= ~NSWindowStyle.Miniaturizable; // 保留最小化则删除此行 nsWindow.ContentMinSize = nsWindow.Frame.Size; nsWindow.ContentMaxSize = nsWindow.Frame.Size; } return true; } }
说明:Zoom(null)方法会将窗口最大化,通过设置ContentMinSize和ContentMaxSize为当前最大化尺寸,结合移除Resizable样式,窗口将无法被还原或调整大小。
验证效果
分别在Windows和Mac Catalyst平台运行应用:
- 启动时窗口自动最大化
- 标题栏的还原按钮被禁用或隐藏
- 无法通过拖动窗口边缘调整大小
内容的提问来源于stack exchange,提问作者Smit Rathod
相关产品推荐
相关产品推荐

