Почему все в WPF размыто? - PullRequest
13 голосов
/ 30 апреля 2009

Может кто-нибудь объяснить, почему все в WPF размыто? Это что-то, что можно исправить?

Ответы [ 2 ]

18 голосов
/ 30 апреля 2009

Причиной этого является система сглаживания, которая расширяет линию на несколько пикселей, если она не совпадает с пикселями физического устройства.

WPF не зависит от разрешения. Это означает, что вы указываете размер элемента пользовательского интерфейса в дюймах, а не в пикселях. Логическая единица в WPF - 1/96 дюйма. Этот масштаб выбран, потому что большинство экранов имеют разрешение 96 точек на дюйм. Таким образом, в большинстве случаев 1 логическая единица соответствует 1 физическому пикселю. Но если меняется разрешение экрана, это правило больше не действует.

Все элементы управления WPF предоставляют свойство SnapsToDevicePixels. Если установлено значение true, элемент управления гарантирует, что все края отображаются точно на пикселях физического устройства. Но, к сожалению, эта функция доступна только на уровне управления.

Источник: Рисование линий точно на пикселях физического устройства

2 голосов
/ 22 июля 2015

Быстрое исправление:

Используйте эти опции для каждого контейнера от корня до вашего размытого элемента управления

        UseLayoutRounding="True"
        RenderOptions.BitmapScalingMode="NearestNeighbor"
        SnapsToDevicePixels="True"
        RenderOptions.ClearTypeHint="Enabled"

Пояснение:

UseLayoutRounding = true исправляет проблемы с макетом субпикселя. Они часто происходят потому, что, например, Эффекты изменяют размеры элементов управления, чтобы быть чем-то между пикселями.

RenderOptions.BitmapScalingMode = NearestNeighbor исправляет размытую выборку растровых изображений. Растровые изображения используются, когда используются эффекты или другие методы. Когда они повторно применяются к контейнеру или элементу управления, они могут оказаться между пикселями и, следовательно, интерполировать пиксели растрового изображения.

SnapsToDevicePixels = "True" исправляет вертикальные и горизонтальные многоугольники, линии и прямоугольники, отображаемые между пикселями

RenderOptions.ClearTypeHint = "Включено" включает открытый тип текста. Он очень легко отключается эффектами или всякий раз, когда средство визуализации не знает точного фона текста.

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

...