Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Автоматическое масштабирование позволяет форме и его элементам управления, разработанным на одном компьютере с определенным разрешением дисплея или шрифтом, отображаться соответствующим образом на другом компьютере с другим разрешением или шрифтом. Он гарантирует, что форма и его элементы управления будут интеллектуально изменять размер, чтобы обеспечить согласованность с собственными окнами и другими приложениями на компьютерах пользователей и других разработчиков. Автоматическое масштабирование и визуальные стили позволяют приложениям Windows Forms сохранять согласованное оформление, сопоставимое с встроенными приложениями Windows на каждом компьютере пользователя.
В большинстве случаев автоматическое масштабирование работает должным образом в Windows Forms. Однако изменения схемы шрифтов могут быть проблематичными. Пример решения этой проблемы см. в статье Практическое руководство. Реагирование на изменения схемы шрифтов в приложении Windows Forms.
Необходимость автоматического масштабирования
Без автоматического масштабирования приложение, предназначенное для одного разрешения дисплея или шрифта, будет отображаться слишком маленьким или слишком большим при изменении разрешения или шрифта. Например, если приложение разработано с использованием Tahoma размером 9 как основного уровня, то без корректировки оно будет отображаться слишком маленьким при запуске на компьютере, где системный шрифт Tahoma имеет размер 12. Текстовые элементы, такие как заголовки, меню, содержимое текстового поля и т. д., будут отображаться меньше других приложений. Кроме того, размер элементов пользовательского интерфейса, содержащих текст, например строку заголовка, меню и многие элементы управления, зависят от используемого шрифта. В этом примере эти элементы также будут отображаться относительно меньше.
Аналогичная ситуация возникает, когда приложение предназначено для определенного разрешения дисплея. Наиболее распространенное разрешение дисплея составляет 96 точек на дюйм (DPI), что соответствует масштабированию дисплея 100%, но более высокие разрешения, поддерживающие 125%, 150%, 200% (которые соответственно равны 120, 144 и 192 DPI) и выше, становятся более распространенными. Без корректировки приложение, особенно графическое, предназначенное для одного разрешения, будет отображаться слишком большое или слишком небольшое при выполнении в другом разрешении.
Автоматическое масштабирование стремится устранить эти проблемы, автоматически изменяя размеры формы и её дочерних элементов управления в соответствии с относительным размером шрифта или разрешением отображения. Операционная система Windows поддерживает автоматическое масштабирование диалоговых окон с помощью относительной единицы измерения, называемой единицами диалоговых окон. Единица диалога основана на системном шрифте, и её связь с пикселями можно определить с помощью функции SDK Win32 GetDialogBaseUnits
. Когда пользователь изменяет тему, используемую Windows, все диалоговые окна автоматически настраиваются соответствующим образом. Кроме того, Windows Forms поддерживает автоматическое масштабирование в соответствии с системным шрифтом по умолчанию или разрешением дисплея. При необходимости автоматическое масштабирование можно отключить в приложении.
Осторожность
Произвольные смеси режимов DPI и масштабирования шрифтов не поддерживаются. Хотя вы можете масштабировать элемент управления пользователем с помощью одного режима (например, DPI) и поместить его в форму с помощью другого режима (шрифта) без проблем, но сочетание базовой формы в одном режиме и производной форме в другой может привести к непредвиденным результатам.
Автоматическое масштабирование в действии
Windows Forms использует следующую логику для автоматического масштабирования форм и их содержимого:
Во время проектирования каждый ContainerControl записывает режим масштабирования и текущее разрешение в AutoScaleMode и AutoScaleDimensionsсоответственно.
Во время выполнения фактическое разрешение хранится в свойстве CurrentAutoScaleDimensions. Свойство AutoScaleFactor динамически вычисляет соотношение между разрешением масштабирования во время выполнения и времени разработки.
При загрузке формы, если значения CurrentAutoScaleDimensions и AutoScaleDimensions отличаются, вызывается метод PerformAutoScale для масштабирования элемента управления и его дочерних элементов. Этот метод приостанавливает макет и вызывает метод Scale для выполнения фактического масштабирования. После этого значение AutoScaleDimensions обновляется, чтобы избежать прогрессивного масштабирования.
PerformAutoScale также вызывается автоматически в следующих ситуациях:
В ответ на событие OnFontChanged, если режим масштабирования Font.
Когда возобновляется макет управляющего элемента контейнера и обнаруживается изменение в свойствах AutoScaleDimensions или AutoScaleMode.
Как было указано выше, при изменении масштаба родительского элемента ContainerControl. Каждый контейнерный элемент управления отвечает за масштабирование своих дочерних элементов, используя собственные факторы масштабирования, а не факторы родительского контейнера.
Дочерние элементы управления могут изменять поведение масштабирования с помощью нескольких средств:
Свойство ScaleChildren можно переопределить, чтобы определить, следует ли масштабировать дочерние элементы управления.
Метод GetScaledBounds можно переопределить, чтобы изменить границы масштабирования элемента управления, но не логику масштабирования.
Метод ScaleControl можно переопределить, чтобы изменить логику масштабирования для текущего элемента управления.
См. также
.NET Desktop feedback