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

如何在.NET MAUI Blazor组件应用中禁用还原按钮并强制窗口最大化

.NET MAUI Blazor:禁用窗口还原按钮并强制最大化启动

要实现Windows和Mac Catalyst平台上禁用还原按钮、强制应用最大化启动的需求,需要针对两个平台分别编写平台特定代码——因为窗口管理API是平台独有的。以下是具体实现步骤:

Windows平台实现

在Windows平台,我们需要借助Win32 API修改窗口样式,同时通过WinUI的窗口API设置启动状态:

  1. 打开项目中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实例来修改窗口属性:

  1. 打开项目中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:53:11