Несоответствие настроек DPI WPF Aero Glass
У меня есть приложение WPF, использующее Aero Glass. При использовании приложения с настройкой 120 точек на дюйм поля в моем пользовательском интерфейсе не совпадают с полями, которые я передаю вызову API DwmExtendFrameIntoClientArea.
Как получить параметр DPI системы в.NET 3.0, чтобы можно было исправить поле, передаваемое вызову API DwmExtendFrameIntoClientArea?
По сути, пользовательский интерфейс WPF использует независимые от устройства модули, тогда как вызов API DwmExtendFrameIntoClientArea использует пиксели.
Спасибо
1 ответ
Решение
Хорошо, что-то вроде следующего решит проблему:
Public Shared Function GetDpiAdjustedMargins(ByVal WindowHandle As IntPtr, ByVal Left As Integer, ByVal Right As Integer, ByVal Top As Integer, ByVal Bottom As Integer) As Margins
'
Dim Graphics As System.Drawing.Graphics = System.Drawing.Graphics.FromHwnd(WindowHandle)
Dim DesktopDPIx As Single = Graphics.DpiX
Dim DesktopDPIy As Single = Graphics.DpiY
Dim Margins As Margins = New Margins
Margins.Left = Left * (DesktopDPIx / 96)
Margins.Right = Right * (DesktopDPIx / 96)
Margins.Top = Top * (DesktopDPIx / 96)
Margins.Bottom = Bottom * (DesktopDPIx / 96)
Return Margins
'
End Function
Источник: Pro WPF в C# 2008 Мэтью Макдональд