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

.NET MAUI中如何最大化Mac Catalyst平台的ContentPage?

在.NET MAUI Mac Catalyst平台实现窗口最大化

在.NET MAUI中,Mac Catalyst没有像Windows平台那样直接提供Window.Maximize()方法,但可以通过调用原生AppKit API实现等效的窗口最大化功能,以下是具体实现方式:

方法一:使用依赖注入(推荐,解耦平台代码)

1. 定义共享接口

在共享项目中创建一个窗口服务接口,统一跨平台的窗口操作:

public interface IWindowService
{
    void MaximizeWindow();
}

2. 实现Mac Catalyst平台服务

在Mac Catalyst项目中实现上述接口,调用原生NSWindow的ToggleZoom方法(该方法和Mac系统自带的最大化按钮行为一致,切换窗口缩放状态):

using AppKit;
using Foundation;

namespace YourAppNamespace.MacCatalyst;

public class MacWindowService : IWindowService
{
    public void MaximizeWindow()
    {
        var keyWindow = NSApplication.SharedApplication.KeyWindow;
        keyWindow?.ToggleZoom(nil);
    }
}

3. 注册服务

在项目根目录的MauiProgram.cs中注册该服务:

builder.Services.AddSingleton<IWindowService, MacWindowService>();

4. 在ContentPage中调用

通过构造函数注入服务后,即可在需要的地方触发最大化:

private readonly IWindowService _windowService;

public MainPage(IWindowService windowService)
{
    InitializeComponent();
    _windowService = windowService;
}

// 示例:按钮点击事件触发最大化
private void MaximizeBtn_Clicked(object sender, EventArgs e)
{
    _windowService.MaximizeWindow();
}

方法二:直接调用原生API(快速实现,耦合平台)

如果不需要跨平台兼容,也可以直接在ContentPage中获取原生NSWindow实例并调用最大化方法:

private void MaximizeWindowDirectly()
{
    var currentWindow = Application.Current.Windows.FirstOrDefault();
    if (currentWindow?.Handler?.PlatformView is NSWindow nativeWindow)
    {
        nativeWindow.ToggleZoom(nil);
    }
}

补充说明

  • ToggleZoom方法会切换窗口状态:正常大小→最大化,最大化→恢复到之前的尺寸,和Mac系统默认行为完全一致。
  • 如果需要强制最大化(忽略当前状态),可以先判断窗口的Zoomed属性,再决定是否调用ToggleZoom:
if (!nativeWindow.Zoomed)
{
    nativeWindow.ToggleZoom(nil);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:52:14