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

如何在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等平台统一处理窗口尺寸:

  1. 确保共享项目已引用Uno.UI.WindowManager NuGet包(版本需与Uno Platform主版本匹配)
  2. 在共享项目的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:04:56