如何在Uno Platform中设置窗口初始尺寸并支持用户调整?
解决Uno Platform应用窗口初始尺寸与调整问题
Windows平台专属方案
在Windows平台上,Uno基于WinUI3实现,直接修改MainPage或MainWindow.xaml的宽高只会影响内容区域,无法改变窗口本身的尺寸。需要通过AppWindow操作窗口实例:
在Windows项目的MainWindow.xaml.cs中修改构造函数:
public MainWindow() { this.InitializeComponent(); // 获取当前窗口的AppWindow实例 if (AppWindow.GetFromWindowId(Win32Interop.GetWindowIdFromWindow(this.WindowHandle)) is AppWindow appWindow) { // 设置初始窗口尺寸(含标题栏和边框) appWindow.Resize(new Windows.Graphics.SizeInt32 { Width = 800, Height = 600 }); // 显式允许用户调整窗口大小(默认已开启,可根据需求调整) appWindow.Presenter.IsResizable = true; } }
跨平台通用方案
使用Uno官方提供的WindowManagerAPI,可在Windows、macOS、Linux等平台统一处理窗口尺寸:
- 确保共享项目已引用
Uno.UI.WindowManagerNuGet包(版本需与Uno Platform主版本匹配) - 在共享项目的
App.xaml.cs的OnLaunched方法中添加逻辑:
protected override void OnLaunched(LaunchActivatedEventArgs args) { base.OnLaunched(args); var window = Window.Current; if (window.Content is not Frame rootFrame) { rootFrame = new Frame(); window.Content = rootFrame; } if (rootFrame.Content == null) { rootFrame.Navigate(typeof(MainPage), args.Arguments); } // 跨平台设置窗口初始尺寸 var windowManager = WindowManager.GetForCurrentWindow(); windowManager.SetPreferredSize(new Size(800, 600)); // 允许用户调整窗口大小 windowManager.SetCanResize(true); // 可选:设置窗口最小尺寸 // windowManager.SetMinimumSize(new Size(600, 400)); }
关键注意点
- 不要在
MainPage构造函数中设置Width/Height,这仅会修改页面内容区域大小,不影响窗口边框 - 跨平台方案中,
SetPreferredSize在不同平台的表现略有差异:Windows平台会直接设置窗口整体尺寸,其他平台会适配系统窗口规则
内容的提问来源于stack exchange,提问作者MinecAnton209
相关产品推荐
相关产品推荐

