Поделиться через


Типография в WPF

В этой теме представлены основные типографические особенности WPF. К этим функциям относятся улучшенная качество и производительность отрисовки текста, поддержка типографии OpenType, расширенный международный текст, улучшенная поддержка шрифтов и новые интерфейсы программирования текстовых приложений (API).

Улучшено качество и производительность текста

Текст в WPF отрисовывается с помощью Microsoft ClearType, что повышает четкость и удобочитаемость текста. ClearType — это технология программного обеспечения, разработанная корпорацией Майкрософт, которая улучшает удобочитаемость текста на существующих LCD (Liquid Crystal Displays), таких как экраны ноутбука, экраны карманного компьютера и мониторы с плоской панелью. ClearType использует субпиксельное сглаживание, которое позволяет отображать текст с большей точностью к истинной форме путем выравнивания символов по дробной части пикселя. Дополнительное разрешение увеличивает резкость крошечных деталей в текстовом отображении, что значительно упрощает чтение в течение длительного времени. Еще одним улучшением ClearType в WPF является сглаживание по y-направлению, которое сглаживает верхние и нижние части неглубоких кривых в текстовых буквах. Дополнительные сведения о функциях ClearType см. в разделе "Обзор ClearType".

Текст с ClearType сглаживанием по y-оси
Текст с ClearType антиалиасингом по направлению оси Y

Весь конвейер отрисовки текста может быть ускорен с помощью аппаратного обеспечения в WPF, если ваш компьютер соответствует минимальным требованиям к оборудованию. Отрисовка, которая не может быть выполнена с помощью оборудования, возвращается к отрисовке программного обеспечения. Аппаратное ускорение влияет на все этапы конвейера текстового рендеринга — от хранения отдельных глифов, компоновки глифов в последовательности, применения эффектов до применения алгоритма смешения ClearType к конечному отображаемому результату. Дополнительные сведения об аппаратном ускорении см. в разделе "Уровни отрисовки графики".

Схема конвейера отрисовки текста

Кроме того, анимированный текст, независимо от символа или глифа, полностью использует возможности графического оборудования, включенного WPF. Это приводит к плавной анимации текста.

Богатая типографика

Формат шрифта OpenType — это расширение формата шрифта TrueType®. Формат шрифта OpenType был разработан совместно корпорацией Майкрософт и Adobe и предоставляет широкий спектр расширенных типографических функций. Объект Typography предоставляет множество расширенных функций шрифтов OpenType, таких как стилистические альтернативы и завитки. Пакет SDK для Windows предоставляет набор примеров шрифтов OpenType, разработанных с широкими возможностями, такими как шрифты Pericles и Pescadero. Дополнительную информацию см. в примере пакета шрифтов OpenType.

Шрифт Pericles OpenType содержит дополнительные глифы, которые предоставляют стилистические альтернативные варианты стандартного набора глифов. В следующем тексте отображаются стилистические альтернативные глифы.

Текст с помощью стилистических альтернативных глифов OpenType

Шваши — это декоративные глифы, которые используют сложные украшения и часто связаны с каллиграфией. Следующий текст отображает обычные и замашистые глифы для шрифта Pescadero.

Текст с использованием стандарта OpenType и сваш глифов

Дополнительные сведения о функциях OpenType см. в разделе "Функции шрифта OpenType".

Расширенная поддержка международного текста

WPF обеспечивает расширенную международную поддержку текста, предоставляя следующие возможности:

  • Автоматическое интервалирование строк во всех системах записи с помощью адаптивного измерения.

  • Широкая поддержка международного текста. Дополнительные сведения см. в разделе "Глобализация для WPF".

  • Разрыв линий, дефисация и обоснование на языке.

Расширенная поддержка шрифтов

WPF обеспечивает расширенную поддержку шрифтов, предоставляя следующие возможности:

  • Юникод для всего текста. Для поведения шрифта и выбора больше не требуется набор символов или кодовая страница.

  • Поведение шрифта независимо от глобальных параметров, таких как системная локаль.

  • Отдельные FontWeight, FontStretchи FontStyle типы для определения FontFamily. Это обеспечивает большую гибкость, чем в программировании Win32, в котором логические сочетания курсивов и полужирных шрифтов используются для определения семейства шрифтов.

  • Направление записи (горизонтальное и вертикальное) обрабатывается независимо от имени шрифта.

  • Связывание шрифтов и резервное размещение шрифтов в переносимом XML-файле с помощью составной технологии шрифта. Составные шрифты позволяют выполнять создание полного диапазона многоязычных шрифтов. Составные шрифты также предоставляют механизм, который позволяет избежать отображения отсутствующих глифов. Дополнительные сведения см. в примечаниях в FontFamily классе.

  • Международные шрифты, построенные из композитных шрифтов и группы одноязычных шрифтов. Это экономит затраты на ресурсы при разработке шрифтов для нескольких языков.

  • Составные шрифты, встроенные в документ, обеспечивают его переносимость. Дополнительные сведения см. в примечаниях в FontFamily классе.

Новые интерфейсы программирования текстовых приложений (API)

WPF предоставляет несколько текстовых API для разработчиков, которые следует использовать при включении текста в свои приложения. Эти API группируются в три категории:

  • Макет и пользовательский интерфейс. Общие текстовые элементы управления для графического пользовательского интерфейса (GUI).

  • Упрощенное рисование текста. Позволяет напрямую выводить текст на объекты.

  • Расширенное форматирование текста. Позволяет реализовать пользовательский текстовый движок.

Макет и пользовательский интерфейс

На самом высоком уровне функциональных возможностей текстовые API предоставляют общие элементы управления пользовательского интерфейса, такие как Label, TextBlockи TextBox. Эти элементы управления предоставляют базовые элементы пользовательского интерфейса в приложении и предлагают простой способ представления и взаимодействия с текстом. Такие элементы управления, как RichTextBox и PasswordBox, позволяют более расширенную или специализированную обработку текста. И такие классы, как TextRange, TextSelection, и TextPointer позволяют выполнять полезные операции с текстом. Эти элементы управления пользовательского интерфейса предоставляют такие свойства, как FontFamily, FontSizeи FontStyle, что позволяет управлять шрифтом, используемым для отрисовки текста.

Использование растровых эффектов, преобразований и текстовых эффектов

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

тень текста с мягкостью = 0,25

В следующем примере показаны эффект падающей тени и шум, применённые к тексту.

Тень текста с шумом

В следующем примере показан внешний эффект свечения, примененный к тексту.

Тень текста с помощью OuterGlowBitmapEffect

В следующем примере показан эффект размытия, примененный к тексту.

тень текста с использованием эффекта размытия Bitmap

В следующем примере показана вторая строка текста, масштабируемая на 150% вдоль оси x, а третья строка текста, масштабируемая на 150% вдоль оси y.

Масштабирование текста с помощью ScaleTransform

В следующем примере показано изменение текста по оси x.

Отклонение текста с помощью SkewTransform

Объект TextEffect является вспомогательным объектом, который позволяет рассматривать текст как одну или несколько групп символов в текстовой строке. В следующем примере показано вращение отдельного символа. Каждый символ поворачивается независимо с интервалом в 1 секунду.

Снимок экрана: поворот текста

Использование потоковых документов

В дополнение к общим элементам управления пользовательского интерфейса WPF предлагает элемент управления макетом для представления текста.FlowDocument Элемент FlowDocument в сочетании с DocumentViewer элементом предоставляет элемент управления для больших объемов текста с различными требованиями к макету. Элементы управления макетом предоставляют доступ к расширенной типографике через объект Typography и шрифтовые свойства других элементов пользовательского интерфейса.

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

Снимок экрана: шрифты OpenType.

Дополнительные сведения см. в разделе "Документы" в WPF.

Упрощенное рисование текста

Текст можно отобразить непосредственно на объектах WPF с помощью метода DrawText объекта DrawingContext. Чтобы использовать этот метод, создайте FormattedText объект. Этот объект позволяет нарисовать многострочный текст, в котором каждый символ в тексте может быть отформатирован по отдельности. Функциональные возможности объекта содержат большую часть функционала флагов DrawText в Windows API. Кроме того, объект содержит функции, такие как поддержка многоточия, в рамках которой многоточие отображается, когда текст выходит за пределы границ. В следующем примере показан текст с несколькими форматами, включая линейный градиент во втором и третьем словах.

Текст, отображаемый с помощью объекта FormattedText

Форматированный текст можно преобразовать в Geometry объекты, позволяя создавать другие типы визуально интересного текста. Например, можно создать объект Geometry на основе структуры текстовой строки.

контур текста с использованием линейной градиентной кисти

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

Текст с различными цветами для заливки и обводки

Текст с кистью изображения, примененной к штриху

Текст с использованием кисти изображения, примененной к обводке и выделению

Дополнительные сведения об объекте FormattedText см. в разделе "Форматированный текст документа".

Расширенное форматирование текста

На самом продвинутом уровне текстовых API WPF предлагает возможность создавать настраиваемую текстовую разметку с помощью TextFormatter объекта и других типов в System.Windows.Media.TextFormatting пространстве имен. Классы TextFormatter и связанные с ними классы позволяют реализовать настраиваемый текстовый макет, поддерживающий собственное определение форматов символов, стилей абзацев, правил нарушения строк и других функций макета для международного текста. Существует очень мало случаев, когда вам захочется переопределить реализацию макета текста WPF по умолчанию. Однако если вы создали элемент управления редактирования текста или приложение, может потребоваться другая реализация, отличная от реализации WPF по умолчанию.

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

схема клиента текстового макета и TextFormatter

Дополнительные сведения о создании пользовательского текстового макета см. в разделе "Дополнительное форматирование текста".

См. также