Несоответствие настроек 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 Мэтью Макдональд

Другие вопросы по тегам