Проблема описана и продемонстрирована по следующим ссылкам:
- Пол Стовелл WPF: размытое отображение текста
- www.gamedev.net форум
- Microsoft Connect: текстовый рендерер WPF создает плохо размытый текст с маленьким шрифтом
Пояснение: Ясность текста в WPF . Эта ссылка имеет сравнение шрифтов.
Я хотел бы собрать все возможные решения для этой проблемы. Microsoft Expression Blend использует WPF, но шрифты выглядят читабельно.
- Темный фон, как в Microsoft Expression Blend
- Увеличение размера шрифта и изменение шрифта (Calibri ...) [ссылка]
- Вставить формы окна [ссылка]
- Используйте класс GDI + и / или Windows Forms TextRenderer, чтобы отобразить текст в растровом изображении, а затем отобразить это растровое изображение в качестве элемента управления WPF. [ссылка на сайт]
Есть еще решения?
Это будет исправлено в бета-версии 2 VS2010 (и WPF4)
ЭТО СМОТРИТ, КАК ЭТО ПОЛНОСТЬЮ РЕШЕНО!
ComputerZen.com Скотта Хансельмана: WPF и текстовое размытие, теперь с полной ясностью
Ответы:
Техническое образование
Подробная статья о рендеринге текста WPF от одного из менеджеров текстовых программ WPF на windowsclient.net: Четкость текста в WPF .
Проблема сводится к тому, что WPF нужен линейно масштабируемый рендерер шрифтов для плавной анимации. Pure ClearType, с другой стороны, занимает немного свободы с шрифтом, чтобы выдвигать вертикальные основы в следующий пиксель.
Разница очевидна, если сравнивать классический «каскадный» рисунок. WinForms в нижней левой части, WPF в верхней правой части:
Хотя я и не фанат особенностей рендеринга шрифтов в WPF, я могу представить шум, если анимации будут прыгать, как в каскаде Winforms.
Игра с реестром
Особый интерес для меня представляла ссылка на статью MSDN « Настройки реестра ClearType », в которой объясняются возможные пользовательские настройки реестра:
Игра с этими настройками на самом деле не улучшила основной проблемы, но может помочь, уменьшив эффект цветового кровотечения для чувствительных пользователей.
Другой подход
Лучший совет, который дала статья Text Clarity, - это увеличение размера шрифта и изменение шрифта. Calibri работает для меня лучше, чем стандартный пользовательский интерфейс Segoe. Из-за его популярности в качестве веб-шрифта, я тоже попробовал Verdana, но он имеет неприятный скачок в весе между 14pt и 15pt, что очень заметно при анимации размера шрифта.
WPF 4.0
В WPF 4 будет улучшена поддержка влияния на рендеринг шрифтов. В текстовом блоге WPF есть статья, объясняющая изменения. Наиболее заметно, что теперь есть (по крайней мере) три различных типа рендеринга текста:
<grumble> Этого должно быть достаточно для каждого дизайнера. </ grumble>
источник
В .NET 4 наконец-то есть решение для низкого качества рендеринга текста в WPF, но оно хорошо скрыто. Установите следующее для каждого окна:
Значением по умолчанию является «Идеально», что совсем не то, что подразумевает название.
В TextOptions есть два других параметра, а именно TextHintingMode и TextRenderingMode, но оба имеют разумные значения по умолчанию.
источник
Я столкнулся с проблемой на днях, когда использовал границу, к которой применен эффект DropShadowEffect . В результате весь текст внутри этой границы был очень размытым. Не имеет значения, был ли текст внутри других панелей или непосредственно под границей - любой текстовый блок, являющийся дочерним по отношению к родительскому элементу, к которому применен эффект, похоже, подвержен влиянию.
Решение этого конкретного случая состояло в том, чтобы не помещать вещи внутри границы, которая имеет эффекты, а вместо этого использовать сетку (или что-либо еще, что поддерживает размещение контента друг над другом) и поместить прямоугольник в ту же ячейку, что и текст (т.е. как родной брат в визуальном дереве) и наложить эффекты на это.
Вот так:
источник
Это будет исправлено в бета-версии 2 VS2010 (и WPF4):
источник
SnapToDevicePixels применяется только к фигурам WPF (линии и т. Д.), А не к средству визуализации текста.
Нет известного решения этой проблемы. По словам Microsoft, поведение «нарочно».
Также посмотрите эту ветку на форумах Microsoft, где обсуждаются проблемы - она получила несколько ответов от MS, которые разъясняют их позицию по этому вопросу.
источник
С точки зрения разработчика, единственным известным «обходным путем» на сегодняшний день является использование класса GDI + и / или Windows Forms TextRenderer для отображения текста в растровом изображении, а затем визуализация этого растрового изображения в качестве элемента управления WPF. Помимо очевидных последствий для производительности, это не облегчает проблему для существующих приложений.
Теперь я создал билет Microsoft Connect для этой проблемы (к моему удивлению, несмотря на все негативы, в указанном трекере не было реального сообщения об ошибке).
Поскольку это один из официальных каналов передачи запросов и вопросов в Microsoft, я бы посоветовал также перейти к нему для более быстрого ответа. По крайней мере, если вы хотите, чтобы проблема была решена тем или иным образом, голосование за этот билет и / или подтверждение проблемы помогут привлечь внимание руководителей и инженеров Microsoft к этой проблеме и, возможно, повысить ее предполагаемый приоритет.
источник
Я не считаю это ошибкой, но конфигурация по умолчанию действительно очень раздражает. Вот сравнение всех комбинаций
SnapToDevicePixels
не делает различий в рендеринге текста.Я предпочитаю:
где вертикальные линии никогда не размыты.
Используется шрифт Open Sans Light, который может быть очень красивым, если он хорошо используется, как в последней версии TeamViewer.
Для тех, кто использует Mahapps.Metro, проблема заключается в
TransitioningContentControl
https://github.com/MahApps/MahApps.Metro/issues/889источник
Только что опробовал бета-версию VS2010, которая делается в WPF, и она страдает от проблемы размытых шрифтов. Особенно на подсказках.
Это, кажется, дает некоторые доказательства того, что WPF4 на самом деле не решит проблему (если что-то выглядит хуже)
источник
Вау, я не могу поверить, что наконец-то получил свои WPF-шрифты для чтения И я также не могу поверить, что нет диалогового окна параметров, чтобы сделать эти изменения легкими, в то время как значения по умолчанию ужасны на моем дисплее.
Эти настройки реестра (в десятичном формате) работают для меня и наиболее близки к моему обычному шрифту cleartype:
источник
Они говорят, что «SnapToDevicePixels = true» работает, но я никогда не видел хороших результатов.
Я борюсь с размытым текстом, переключаясь на другой шрифт.
Очевидно, что это не решение проблемы, однако именно так я и обошел эту проблему.
источник
Если вы предпочитаете использовать базовый класс C # для настройки окон для вашего приложения (или у вас есть для этого причина), вот как вы можете настроить форматирование текста для использования привлекательного режима отображения:
источник