UWP如何获取独立显示器上第二窗口的尺寸与缩放系数
解决方案
核心需求:获取次级窗口实际尺寸
AppWindow原生提供了直接读取窗口尺寸的属性,无需切换线程即可调用:
- 只读客户区(无标题栏区域)尺寸:
AppWindow.ClientSize,返回值单位为有效像素(逻辑像素) - 只读全窗口(包含标题栏)尺寸:
AppWindow.Size,返回值单位为有效像素(逻辑像素)
代码示例:
// 次级窗口创建流程 AppWindow secondaryWindow = await AppWindow.TryCreateAsync(); Frame secondaryContent = new Frame(); secondaryContent.Navigate(typeof(YourSecondaryPage)); ElementCompositionPreview.SetAppWindowContent(secondaryWindow, secondaryContent); await secondaryWindow.TryShowAsync(); // 直接读取尺寸 Size clientLogicalSize = secondaryWindow.ClientSize; Size fullWindowLogicalSize = secondaryWindow.Size;
如果你需要窗口的物理像素尺寸,将有效像素尺寸乘以对应显示器的缩放系数即可。
获取次级窗口所在显示器的缩放系数及其他参数
核心注意:DisplayInformation.GetForCurrentView() 的返回值和调用线程所属的视图严格绑定,在主窗口线程调用只会返回主窗口对应显示器的参数,必须切换到次级窗口的调度上下文执行调用才能拿到正确值
方式1:通过DisplayInformation获取参数
通过次级窗口的DispatcherQueue调度到对应视图上下文执行查询:
await secondaryWindow.DispatcherQueue.EnqueueAsync(() => { DisplayInformation secondaryDisplayInfo = DisplayInformation.GetForCurrentView(); // 缩放系数,比如250%对应ResolutionScale.Scale250Percent ResolutionScale scale = secondaryDisplayInfo.ResolutionScale; double scaleFactor = (int)scale / 100.0; // 显示器物理分辨率 uint screenRawWidth = secondaryDisplayInfo.ScreenWidthInRawPixels; uint screenRawHeight = secondaryDisplayInfo.ScreenHeightInRawPixels; // 计算窗口物理像素尺寸 double clientPhysicalWidth = clientLogicalSize.Width * scaleFactor; double clientPhysicalHeight = clientLogicalSize.Height * scaleFactor; });
如果需要监听参数变化(比如窗口拖动到其他显示器、系统缩放系数修改),可以在上述上下文内订阅DisplayInformation.DpiChanged、DisplayInformation.DisplayContentsInvalidated事件实现自动更新。
方式2:通过DisplayMonitor直接获取显示器全量参数
AppWindow自带DisplayId属性,可以直接关联到对应显示器对象,无需切换线程:
DisplayMonitor monitor = DisplayMonitor.GetFromDisplayId(secondaryWindow.DisplayId); // 显示器友好名称 string monitorName = monitor.DisplayName; // 显示器物理尺寸(单位:英寸) Size? monitorPhysicalSize = monitor.PhysicalSizeInInches; // 显示器工作区偏移(单位:物理像素) Point workAreaOffset = monitor.WorkAreaOffsetInRawPixels; // 显示器原始DPI float rawDpiX = monitor.RawDpiX; float rawDpiY = monitor.RawDpiY;
内容的提问来源于stack exchange,提问作者Cristiano Ghersi
相关产品推荐
相关产品推荐

