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

如何在WinUI 3中设置窗口的最小尺寸?

WinUI 3 应用窗口最小尺寸限制设置方法

问题描述

未做尺寸限制的WinUI 3窗口可被用户拖拽缩小至极小尺寸,不符合常规交互预期,问题效果演示如下:
问题演示GIF动图

具体实现步骤

WinUI 3 可直接通过Windows App SDK自带的窗口API实现最小尺寸限制,无需额外编写Win32原生钩子逻辑,具体操作如下:

  • 首先引入所需命名空间
using Microsoft.UI.Windowing;
using Microsoft.UI.Xaml;
  • 在窗口的构造函数(初始化完成后)添加尺寸限制代码,默认桌面应用使用重叠窗口呈现器,直接配置其最小宽高属性即可:
public MainWindow()
{
    InitializeComponent();

    // 获取当前窗口对应的AppWindow实例
    AppWindow appWindow = this.AppWindow;
    // 校验窗口呈现器类型,桌面应用默认为OverlappedPresenter
    if (appWindow.Presenter is OverlappedPresenter overlappingPresenter)
    {
        // 配置窗口最小宽高,单位为物理像素,可根据自身设计需求调整数值
        overlappingPresenter.MinWidth = 800;
        overlappingPresenter.MinHeight = 600;

        // 若有需要,也可通过MaxWidth、MaxHeight属性配置窗口最大尺寸限制
    }
}

兼容旧版本SDK的适配方案

如果你使用的是1.0之前的Windows App SDK预览版本,无法直接通过Window类的AppWindow属性获取实例,可通过窗口句柄完成实例获取:

  • 引入对应互操作命名空间
using WinRT.Interop;
  • 在窗口构造函数中通过句柄获取AppWindow实例,再完成尺寸限制配置:
// 获取当前窗口的原生句柄
IntPtr windowHandle = WindowNative.GetWindowHandle(this);
WindowId winId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(windowHandle);
AppWindow appWindow = AppWindow.GetFromWindowId(winId);

// 最小尺寸配置逻辑和通用方案一致
if (appWindow.Presenter is OverlappedPresenter overlappingPresenter)
{
    overlappingPresenter.MinWidth = 800;
    overlappingPresenter.MinHeight = 600;
}

注意:上述配置仅对默认的重叠窗口模式生效,如果你切换了全屏、紧凑覆盖等其他窗口呈现器,需要对应调整Presenter的获取逻辑。配置完成后用户拖拽窗口缩放时,会自动被限制在设定的最小尺寸以上,不会影响窗口最大化、贴靠布局等系统原生交互。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:06:56