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

.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%)

设备1 PerMonitorV2模式异常效果

设备2(PerMonitor模式、跨显示器移动窗口)

  • 初始在显示器1(主屏幕):设备2初始主屏幕效果
  • 移动到显示器2:设备2移动到副屏效果
  • 初始在显示器2(主屏幕):设备2初始副屏为主屏效果
  • 移动到显示器1:设备2移动到主屏效果

重写的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:24:52