.NET7 WPF应用PerMonitor/PerMonitorV2模式下标题栏尺寸适配异常
.NET7 WPF应用DPI感知适配问题:标题栏尺寸异常
设备环境
两台设备均为Windows11 22H2版本:
- 设备1(台式机):两台1920×1080显示器,缩放比例100%
- 设备2(笔记本):一台2880×1800显示器(缩放175%),一台1920×1080显示器(缩放100%)
正常显示效果
应用清单配置
<application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware> <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitor</dpiAwareness> <!--<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>--> <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware> </windowsSettings> </application>
问题表现
- 设备1使用
PerMonitor模式时显示正常,但切换为PerMonitorV2模式时标题栏尺寸适配异常 - 设备2使用
PerMonitorV2模式时显示正常,但切换为PerMonitor模式时标题栏尺寸适配异常
具体异常场景
设备1(PerMonitorV2模式、显示器缩放175%)
设备2(PerMonitor模式、跨显示器移动窗口)
- 初始在显示器1(主屏幕):
- 移动到显示器2:
- 初始在显示器2(主屏幕):
- 移动到显示器1:
重写的OnDpiChanged代码
Protected Overrides Sub OnDpiChanged(oldValueDpi As DpiScale, newDpi As DpiScale) Dim dpi = VisualTreeHelper.GetDpi(Me).PixelsPerDip Dim screen As Forms.Screen = Forms.Screen.FromHandle(New WindowInteropHelper(Me).Handle) If screen.Bounds.Width > screen.Bounds.Height Then Me.Scrll.LayoutTransform = New ScaleTransform(1 / dpi * screen.Bounds.Width / 1920, 1 / dpi * screen.Bounds.Height / 1080) Else 'in case the monitor is vertical Me.Scrll.LayoutTransform = New ScaleTransform(1 / dpi, 1 / dpi) End If End Sub
内容的提问来源于stack exchange,提问作者Federico Portillo
相关产品推荐
相关产品推荐

