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

如何在.NET MAUI应用中禁用或移除最小化、还原及关闭按钮?

在.NET MAUI中禁用/移除窗口的最小化、还原及关闭按钮

由于.NET MAUI是跨平台框架,窗口标题栏按钮的控制需要针对不同平台编写平台特定代码,之前参考的窗口尺寸设置方案仅负责调整窗口大小,和标题栏按钮控制属于完全不同的API范畴,因此无法生效。以下是各桌面平台的实现方案:

Windows平台(WinUI3)

方式1:隐藏标题栏按钮

通过WinUI3的AppWindow API直接隐藏所有标题栏按钮:

#if WINDOWS
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Windowing;
using WinRT.Interop;
#endif

protected override void OnAppearing()
{
    base.OnAppearing();

#if WINDOWS
    var mauiWindow = Application.Current.Windows.First();
    var winuiWindow = mauiWindow.Handler.PlatformView as Window;
    var hWnd = WindowNative.GetWindowHandle(winuiWindow);
    var windowId = Win32Interop.GetWindowIdFromWindow(hWnd);
    var appWindow = AppWindow.GetFromWindowId(windowId);

    // 隐藏最小化、最大化、关闭按钮
    appWindow.TitleBar.ButtonVisibility = TitleBarButtonVisibility.Collapsed;
#endif
}

方式2:禁用按钮(保留样式但不可点击)

如果需要保留按钮样式但禁用功能,可调用Win32 API修改窗口样式:

#if WINDOWS
using System.Runtime.InteropServices;
#endif

// 定义Win32 API
#if WINDOWS
[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_MINIMIZEBOX = 0x00020000;
private const int WS_MAXIMIZEBOX = 0x00010000;
private const int WS_SYSMENU = 0x00080000; // 关闭按钮属于系统菜单
#endif

protected override void OnAppearing()
{
    base.OnAppearing();

#if WINDOWS
    var mauiWindow = Application.Current.Windows.First();
    var winuiWindow = mauiWindow.Handler.PlatformView as Window;
    var hWnd = WindowNative.GetWindowHandle(winuiWindow);
    
    var currentStyle = GetWindowLong(hWnd, GWL_STYLE);
    // 移除最小化、最大化、系统菜单权限
    SetWindowLong(hWnd, GWL_STYLE, currentStyle & ~WS_MINIMIZEBOX & ~WS_MAXIMIZEBOX & ~WS_SYSMENU);
#endif
}

Mac Catalyst平台

通过AppKit的NSWindow API修改窗口样式,实现按钮的隐藏或禁用:

#if MACCATALYST
using AppKit;
using UIKit;
#endif

protected override void OnAppearing()
{
    base.OnAppearing();

#if MACCATALYST
    var uiWindow = UIApplication.SharedApplication.Windows.First();
    var nsWindow = uiWindow.WindowScene?.Window as NSWindow;
    if (nsWindow == null) return;

    // 禁用最小化、最大化、关闭按钮
    nsWindow.StyleMask &= ~NSWindowStyle.Resizable;    // 禁用还原/最大化
    nsWindow.StyleMask &= ~NSWindowStyle.Miniaturizable; // 禁用最小化
    nsWindow.StyleMask &= ~NSWindowStyle.Closable;       // 禁用关闭

    // 可选:隐藏标题栏(连按钮一起隐藏)
    // nsWindow.TitleVisibility = NSWindowTitleVisibility.Hidden;
    // nsWindow.TitlebarAppearsTransparent = true;
#endif
}

注意:移动平台(Android/iOS)没有传统的窗口标题栏按钮,因此无需处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:20:34