Оформление в WPF

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

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

Текст в WPF отрисовывается с помощью Microsoft ClearType, что улучшает четкость и читаемость текста. ClearType — это программная технология, разработанная Microsoft для улучшения удобочитаемости текста на современных ЖК-мониторах (жидкокристаллических дисплеях), например экранах ноутбуков, карманных ПК и плоскопанельных мониторах. ClearType применяет отрисовку на субпиксельном уровне, которая позволяет отображать текст с повышенной точностью формы, выравнивая символы до дробной части пикселя. Дополнительное разрешение повышает четкость мелких деталей отображаемого текста, значительно облегчая его длительное чтение. Другим улучшением ClearType в WPF является применение устранения контурных неровностей по направлению оси Y, которое сглаживает неровные края на верхних и нижних частях в текстовых знаках. Дополнительные сведения о возможностях ClearType см. в разделе Общие сведения о технологии ClearType.

Text with ClearType y-direction anti-aliasing
Текст со сглаживанием ClearType по оси Y

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

Diagram of the text rendering pipeline

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

Типография с широкими возможностями

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

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

Text using OpenType stylistic alternate glyphs

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

Text using OpenType standard and swash glyphs

Дополнительные сведения о возможностях 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 позволяет создавать визуально интересные применения текста, используя такие возможности, как эффекты точечных рисунков, преобразования и текстовые эффекты. В следующем примере показан типичный эффект тени, примененный к тексту.

Text shadow with Softness = 0.25

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

Text shadow with noise

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

Text shadow using an OuterGlowBitmapEffect

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

Text shadow using a BlurBitmapEffect

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

Text scaled using a ScaleTransform

В следующем примере показан текст, наклоненный вдоль оси X.

Text skewed using a SkewTransform

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

Screenshot of text effect rotating text

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

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

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

Screenshot that shows OpenType fonts.

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

Облегченное рисование текста

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

Text displayed using FormattedText object

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

Text outline using a linear gradient brush

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

Text with different colors for fill and stroke

Text with image brush applied to stroke

Text with image brush applied to stroke and highlight

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

Дополнительное форматирование текста

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

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

Diagram of text layout client and TextFormatter

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

См. также