В идеале приложения должны использовать более высокую плотность пикселей, чтобы показать больше деталей. Например, монитор высокого разрешения может отображать значки панели инструментов аналогичного размера, но использовать дополнительные пиксели для визуализации более четкой графики. Таким образом, вы можете сохранить ту же базовую компоновку, но предлагать повышенную четкость и детализацию. По ряду причин это решение не было возможно в прошлом. Хотя вы можете изменить размер графического контента, который рисуется с помощью GDI / GDI +, User32 (который генерирует визуальные элементы для общих элементов управления) не поддерживает истинное масштабирование.
WPF не страдает от этой проблемы, потому что он сам отображает все элементы пользовательского интерфейса, от простых форм до общих элементов управления, таких как кнопки. В результате, если вы создадите кнопку шириной 1 дюйм на мониторе компьютера, она может остаться на мониторе высокого разрешения шириной 1 дюйм - WPF просто отобразит ее более детально и с большим количеством пикселей.
WPF основывает свое масштабирование на настройках DPI системы, а не DPI вашего физического устройства отображения. Он использует настройку DPI системы при расчете размеров.
WPF Units
Окно WPF и все элементы внутри него измеряются с помощью независимых от устройства единиц измерения. Единица, не зависящая от устройства, определяется как 1/96 дюйма. Чтобы понять, что это означает на практике, вам нужно рассмотреть пример.
Представьте, что вы создаете маленькую кнопку в WPF размером 96 на 96 единиц. Если вы используете стандартную настройку DPI (96 точек на дюйм), каждый независимый от устройства блок соответствует одному реальному физическому пикселю. Это потому, что WPF использует этот расчет:
[Physical Unit Size] = [Device-Independent Unit Size] × [System DPI]
= 1/96 inch × 96 dpi
= 1 pixel
По сути, WPF предполагает, что на дюйм требуется 96 пикселей, потому что Windows сообщает об этом через настройку DPI системы. Однако реальность зависит от вашего устройства отображения.
Например, рассмотрим 20-дюймовый ЖК-монитор с максимальным разрешением 1600 на 1200 пикселей. Используя тире Пифагора, вы можете рассчитать плотность пикселей для этого монитора, как показано здесь:
[Screen DPI] = ((Sqroot of)(1600*1600)+(1200*1200))pixels/19 inches = 100dpi
В этом случае плотность пикселей достигает 100 dpi, что немного выше, чем предполагает Windows. В результате на этом мониторе кнопка размером 96 на 96 пикселей будет чуть меньше 1 дюйма.
С другой стороны, рассмотрим 15-дюймовый ЖК-монитор с разрешением 1024 на 768. Здесь плотность пикселей падает примерно до 85 точек на дюйм, поэтому кнопка 96 на 96 пикселей выглядит чуть больше 1 дюйма.
В обоих этих случаях, если вы уменьшите размер экрана (скажем, путем переключения на разрешение 800 на 600), кнопка (и любой другой элемент экрана) будет отображаться пропорционально больше. Это потому, что настройка DPI системы остается на 96 dpi. Другими словами, Windows продолжает считать, что на дюйм требуется 96 пикселей, хотя при более низком разрешении требуется гораздо меньше пикселей.
Ссылка:
Pro WPF в C # 2008: Windows Presentation Foundation с .NET 3.5, второе издание