TransformToDevice не возвращает правильный коэффициент DPI в Windows 8.1

Привет я реализую приложение с поддержкой DPI, где я хочу рассчитать положение окна на основе текущего разрешения.

Я тестировал приведенный ниже код на Windows 8.1, где ОС не запрашивает повторный вход в систему, если мы изменим настройку DPI. он применяет DPI немедленно.

  var presentationSource = PresentationSource.FromVisual(this);
  transform = presentationSource.CompositionTarget.TransformToDevice;

  int width = transform.m11 * SystemParameters.PrimaryScreenWidth;
  int height = transform.M22* SystemParameters.PrimaryScreenHeight;

но если я изменю DPI, используя mspanel без выхода из системы и повторного входа, TransformToDevice() возвращает старое значение вместо нового. Я думал, что эта матрица преобразования изменится, если настройки DPI изменились.

Есть ли метод, который я должен вызывать при изменении настроек DPI?

1 ответ

Я не уверен в настройках DPI вашей среды, но поскольку вы говорите об изменении DPI "без выхода из системы и повторного входа в систему", я предполагаю, что функция Per-Monitor DPI в Windows 8.1 включена.

В среде Per-Monitor DPI DPI монитора можно мгновенно изменить без выхода из системы и повторного входа, в то время как DPI системы не будет следить за изменением до выхода и повторного входа. Ваш код (хотя он и кажется неполным) чтобы получить систему DPI. Вместо этого вам нужно использовать GetDpiForMonitor от P/Invoke для получения текущего DPI монитора.

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