Правильный подход к автоматическому масштабированию
Я работаю с другим разработчиком в приложении WinForms, и у нас большая проблема с внешним видом, связанным с автоматическим масштабированием.
Моя система (Sony VAIO) по умолчанию имеет значение 125% в этом меню:
![Display scaling]()
Из того, что я могу сказать, 125% устанавливает DPI на 120, а размер шрифта по умолчанию (меню и т.д.) - до 11pt. В другой системе разработчика его значения по умолчанию равны 100%, что составляет 96 точек на дюйм, и шрифт 9pt. Я не уверен, но я думаю, что только DPI - это то, что вызывает у нас печаль.
Проблема проявляется в том, что текст является неправильным размером и либо закрывает другие элементы управления, либо становится слишком разнесенным (в зависимости от того, кто его открыл в дизайнере последним). Насколько я могу судить, все ContainerControl
установлены на AutoScaleMode.Inherit
, а форма верхнего уровня AutoScaleMode.Dpi
. Это то, что используют большинство других людей?
Ответы
Ответ 1
У меня была такая же проблема с одним из моих приложений. Ответ состоял в том, чтобы переместить его в WPF. Решение, с которым я пришел, когда я все еще использовал WinForms, состоял в том, чтобы иметь 2 исполняемых файла. Один из них разработан под 96DPI, а другой - под 120DPI. Это было двойное усилие, но я безуспешно пробовал любые конфигурации компоновки. Если мои элементы управления отлично смотрелись на 96DPI, при переключении на 120DPI они были вне приложения окна. И наоборот.
WPF - единственное решение этой раздражающей проблемы.
Ответ 2
Это может быть проблема с привязкой компонентов в вашей форме. Например, форматирование может быть затронуто, если компоненты не привязаны ко всем четырем углам и изменениям dpi.
Когда я изменил dpi на своем компьютере и открыл конструктор, я не видел проблем с форматированием... Может быть, может помочь дополнительная информация. Какие компоненты охватывают друг друга?
Ответ 3
В конце концов, нашим решением было отключить автомасштабирование, установив AutoScaleMode = AutoScaleMode.None
. Это потребовало некоторого тщательного размещения вещей (и оставило большие пробелы, чем хотелось бы), но, по крайней мере, Auto-Scale не пришла и не испортила вещи.
Это кажется большой проблемой, потому что даже части VisualStudio видели экспонаты из-за моих более высоких настроек экрана.