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

