WPF WindowsFormsHost создает нечеткий текст

Я принимаю winforms DataGridView внутри WindowsFormsHost в окне WPF. Функциональность в порядке, но текст в ячейках сетки выглядит немного более размытым. Обычно текст WinForms имеет очень мало сглаживания.

Как я могу получить DataGridView текст, чтобы выглядеть как обычно на Windows Formили хотя бы острее будет? Я пытался играть с TextOptions.TextFormattingModeа также SnapsToDevicePixelsнастройки WindowsFormsHost, но не вижу никакой разницы.

В качестве примера того, что я имею в виду, здесь два скриншота:

Datagridview внутри WPF WindowsFormsHost:

DataGridView в WindowsFormHost

DataGridView в Windows Forms:

DataGridView в WinForms

1 ответ

Решение

WPF не должен влиять на внешний вид размещенного содержимого WinForms/Win32. Существует ограничение "воздушного пространства", которое диктует, что один пиксель окна может принадлежать только одному графическому API, и он может быть нарисован только этим API. Следовательно, содержимое WinForms рисуется WinForms/GDI+, даже если оно размещено в WPF. Это объясняет, почему размещаемое содержимое будет отображаться поверх любого содержимого WPF в том же окне, даже если содержимое WPF расположено перед ним.

Изменение свойств рендеринга WPF, таких как TextFormattingMode не может повлиять на внешний вид содержимого взаимодействия. Вы должны смотреть на свойства макета / рендеринга размещенного контента WinForms.

Обновить

Предположительно, нечеткий эффект заключается в том, что WPF по умолчанию использует оттенки серого AA для DataGridView, в Paint и / или CellPainting события из DataGridView, установив подсказку графического текста в cleartype:

 e.Graphics.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit

устранена большая часть нечеткости.

Другие вопросы по тегам