.NET MAUI如何设置桌面程序窗口的最小尺寸?
在.NET MAUI中设置桌面窗口最小尺寸
和Avalonia直接通过XAML属性设置不同,.NET MAUI没有全局统一的XAML属性来配置窗口最小尺寸,需要针对不同的桌面平台(Windows、macOS、Linux)编写平台特定代码来实现。以下是各平台的具体实现方式:
Windows平台
在Windows项目的Platforms/Windows/App.xaml.cs中,修改OnLaunched方法,获取原生窗口实例后设置最小宽高:
protected override void OnLaunched(LaunchActivatedEventArgs args) { base.OnLaunched(args); var currentWindow = Application.Current.Windows.FirstOrDefault(); if (currentWindow?.Handler?.PlatformView is Microsoft.UI.Xaml.Window nativeWindow) { nativeWindow.MinWidth = 800; nativeWindow.MinHeight = 400; } }
macOS平台
在MacCatalyst项目的Platforms/MacCatalyst/AppDelegate.cs中,在FinishedLaunching方法里配置窗口最小尺寸:
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) { base.FinishedLaunching(application, launchOptions); var currentWindow = Application.Current.Windows.FirstOrDefault(); if (currentWindow?.Handler?.PlatformView is UIKit.UIWindow nativeWindow) { nativeWindow.WindowScene.SizeRestrictions.MinimumSize = new CoreGraphics.CGSize(800, 400); } return true; }
Linux平台(GTK)
在Linux项目的Platforms/Linux/Program.cs中,创建原生GTK窗口时设置最小尺寸:
static void Main(string[] args) { var app = Gtk.Application.New("com.yourcompany.yourapp", GLib.ApplicationFlags.None); app.Register(GLib.Cancellable.Current); var gtkWindow = new Gtk.Window("Your App"); gtkWindow.DeleteEvent += (sender, e) => app.Quit(); // 设置窗口最小尺寸 gtkWindow.SetSizeRequest(800, 400); var mauiApp = MauiProgram.CreateMauiApp(); var mauiContext = new MauiContext(mauiApp.Services); var mainWindow = new MainWindow(); mainWindow.Handler = new Microsoft.Maui.Handlers.WindowHandler(); mainWindow.Handler.SetMauiContext(mauiContext); mainWindow.Handler.SetVirtualView(mainWindow); gtkWindow.Add((Gtk.Widget)mainWindow.Handler.PlatformView); gtkWindow.ShowAll(); app.Run(); }
注意事项
- 确保窗口实例已完成初始化后再访问
Handler.PlatformView,避免空引用异常。 - 各平台的原生窗口API不同,需对应使用各自的类型和属性进行配置。
内容的提问来源于stack exchange,提问作者stack-delay
相关产品推荐
相关产品推荐

