如何在WinUI 3中设置窗口的最小尺寸?
WinUI 3 应用窗口最小尺寸限制设置方法
问题描述
未做尺寸限制的WinUI 3窗口可被用户拖拽缩小至极小尺寸,不符合常规交互预期,问题效果演示如下:
具体实现步骤
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
相关产品推荐
相关产品推荐

