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 монитора.