Как предотвратить масштабирование WPF с помощью параметров размера шрифта Windows? - PullRequest
10 голосов
/ 02 мая 2011

Я не хочу, чтобы мой WPF GUI масштабировался с параметрами размера шрифта Windows (DPI).Это не просто вопрос указания фиксированного размера шрифта в UserControl, потому что масштабирование влияет на изображения и границы в UserControl.Есть ли свойство, которое я могу установить в UserControl, чтобы отключить scalling?Если нет, то как я могу это сделать?

Ответы [ 3 ]

10 голосов
/ 03 мая 2011

Вы можете уменьшить свой UserControl в соответствии с текущими настройками DPI.Например, если вы обернули свой UserControl следующим DpiDecorator, то он должен выглядеть одинаково независимо от настройки DPI:

public class DpiDecorator : Decorator {

    public DpiDecorator() {
        this.Loaded += (s, e) => {
            Matrix m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice;
            ScaleTransform dpiTransform = new ScaleTransform(1 / m.M11, 1 / m.M22);
            if (dpiTransform.CanFreeze)
                dpiTransform.Freeze();
            this.LayoutTransform = dpiTransform;
        };
    }

}

Или вы можете переместить эту логику в свой UserControl.

Код для получения масштабного коэффициента DPI был взят из этого сообщения в блоге .

2 голосов
/ 24 июня 2011

В состав Windows входит помощник по совместимости для ошибочных приложений, которые не работают в настройках с высоким разрешением:

Обязательно выключите (или выключите) " Используйте масштабирование DPI в стиле Windows XP ":

enter image description here

И убедитесь, что ваше приложение не имеет записи "dpiAware" в манифесте сборки.

Windows будет обманывать ваше приложение, сообщать ему, что оно имеет разрешение 96 точек на дюйм, а затем графическая карта будет масштабировать все окно для вас.

Все будет немного нечетко и обычно неприятно для использования, но оно будет работать достаточно хорошо, пока вы не исправите глючный элемент управления WinForm.

Примечание: Запись манифеста dpiAware позволяет вашему приложению сообщить Windows, что оно хочет отказаться от масштабирования dpi. Приложения добавляют этот элемент, только если они были протестированы с высоким разрешением.

1 голос
/ 06 июня 2011

в дополнение к DpiDecorator вам также нужно будет зафиксировать размер шрифта ваших предметов.Например, в Windows XP, если для вашего параметра установлено значение «Большие шрифты», размер шрифта для элемента меню устанавливается на 14, а также увеличивается с использованием параметра DPI, поэтому если вы не исправите размер шрифта MenuItem или любой другой элемент пользовательского интерфейсашрифт, вы получите значение окна по умолчанию для этого типа элемента.Также помните, что пользователь может вручную изменить размер шрифта / шрифт для других элементов ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...