Дополнительное форматирование текста
Обновлен: Ноябрь 2007
WPF (Windows Presentation Foundation) предоставляет надежный набор API-интерфейсы для включения текста в приложение. Макет и пользовательский интерфейс API-интерфейсы, такие как TextBlock, предоставляют наиболее типично и обще-используемые элементы для представления текста. Рисование API-интерфейсы, например GlyphRunDrawing и FormattedText, предоставляет возможность включения в рисунки форматированного текста. В наиболее продвинутом уровне, WPF предоставляет эластичный механизм форматирования текста для управления каждым аспектом представления текста, таким как управление хранением текста, управление исполнением форматирования текста, и управление встроенным объектом.
В этом разделе представлено введение в форматирование текста WPF. Основное внимание уделяется реализации клиента и использовании механизма форматирования текста WPF.
Примечание. |
---|
Все примеры кода в этом документе можно найти в Пример расширенного форматирования текста. |
В этом разделе содержатся следующие подразделы.
- Необходимые компоненты
- Дополнительное форматирование текста
- Использование модуля форматирования текста
- Реализация клиентского хранилища текста
- Предоставление исполнений текста
- Определение свойств форматирования
- Связанные разделы
Необходимые компоненты
Чтение этого раздела предполагает знакомство с верхним уровнем API-интерфейсы, использующегося для представлении текста. Большинство пользовательских сценариев не потребует дополнительного форматирования текста API-интерфейсы, рассмотренного в этом разделе. Для введения в другой текст API-интерфейсы см. Документы в Windows Presentation Foundation.
Дополнительное форматирование текста
Макет текста и элементы управления Пользовательский интерфейс в WPF предоставляют свойства форматирования, позволяющие легко включать в приложение форматированный текст. Эти элементы управления предоставляют ряд свойств для обработки представления текста, включающие его гарнитуру, размер и цвет. В обычных условиях эти элементы управления могут обрабатывать большинство представлений текста в приложении. Тем не менее, некоторые дополнительные сценарии требуют элемент управления хранилищем текста и представлением текста.WPF предоставляет расширяемый механизм форматирования текста.
Дополнительные функции форматирования текста, расположенные в WPF, состоят из механизма форматирования текста, хранилища текста, исполнения текста и свойств форматирования. Механизм форматирования текста, TextFormatter, создает строки текста, используемые для его представления. Это достигается путем инициирования процесса форматирования строки и вызовом модуля форматирования текста FormatLine модуля форматирования текста. Модуль форматирования текста извлекает исполнения текста из хранилища текста путем вызова метода GetTextRun хранения. Затем объекты TextRun преобразуются в объекты TextLine с помощью модуля форматирования текста и передаются в приложение для проверки или отображения на экране.
Использование модуля форматирования текста
TextFormatter является механизмом форматирования текста WPF и служит для форматирования и разбивки строк текста. Модуль форматирования текста поддерживает различные форматы текстовых знаков и стили абзацев, а также включает поддержку международного макета текста.
В отличие от традиционного текстового API-интерфейс, объект TextFormatter взаимодействует с клиентом разметки текста через набор методов обратного вызова. Для предоставления этих методов в реализации класса TextSource требуется клиент. Следующая диаграмма иллюстрирует взаимодействие разметки текста между клиентским приложением и объектом TextFormatter.
Взаимодействие между приложением и объектом TextFormatter
Модуль форматирования текста используется для извлечения форматированных строк текста из хранилища текста, которое является реализацией метода TextSource. Это осуществляется первоначальным созданием экземпляра модуля форматирования текста, путем использования метода Create. Этот метод создает экземпляр модуля форматирования текста и задает максимальные значения высоты и ширины строки. Сразу после создания экземпляра модуля форматирования текста, запускается процесс создания строки путем вызова FormatLine метода. TextFormatter обращается к источнику текста, чтобы извлечь текст и параметры форматирования отрезков текста, формирующих строку.
В следующем примере показан процесс форматирования хранилища текста. Объект TextFormatter используется для извлечения строк текста из хранилища текста и последующего форматирования строк текста для перемещения в DrawingContext.
Реализация клиентского хранилища текста
При расширении механизма форматирования текста потребуется реализовать и управлять аспектами хранилища текста. Это нетривиальная задача. Хранилище текста отвечает за отслеживание свойств исполнения текста, свойств абзаца, встроенных объектов и другого подобного содержимого. Оно также предоставляет модуль форматирования текста с индивидуальными объектами TextRun, которые модуль форматирования текста использует для создания объектов TextLine.
Для обработки виртуализации хранилища текста, хранилище текста должен быть производным от TextSource. TextSource определяет метод, которые модуль форматирования текста использует для извлечения исполнений текста из хранилища текста. GetTextRun является методом, используемым модулем форматирования текста для извлечения исполнений текста, используемых в форматировании строки. Вызов GetTextRun неоднократно осуществляется модулем форматирования текста до тех пор, пока не выполняется одно из следующих условий:
Возвращается TextEndOfLine или подкласс.
Суммарная ширина исполнений текста превышает ширину строк, указанную или в вызове для создания модуля форматирования текста или в вызове метода FormatLine модуля форматирования текста.
Возвращается новая последовательность Юникод, такая как «CF», «LF», или «CRLF».
Предоставление исполнений текста
Ядром процесса форматирования текста является взаимодействие между модулем форматирования текста и хранилищем текста. Реализация TextSource предоставляет модуля форматирования текста с объектами TextRun и свойствами, с которыми форматируются исполнения текста. Это взаимодействие обрабатывается методом GetTextRun, который вызывается модулем форматирования текста.
В следующей таблице представлены некоторые из предварительно определенных объектов TextRun.
Тип TextRun |
Использование |
---|---|
Специализированное исполнение текста, используемое для обратной передачи глифов символа модулю форматирования текста. |
|
Специализированное исполнение текста используется для предоставления содержимого, в котором выполняются измерение, проверка наличия и рисование, такое как кнопка или изображения в тексте. |
|
Специализированное исполнение текста используется для отметки конца строки. |
|
Специализированное исполнение текста используется для отметки конца абзаца. |
|
Специализированное исполнение текста используется для отметки конца сегмента, такого как конец области, на который влияет предыдущее исполнение TextModifier. |
|
Специализированное исполнение текста используется для отметки диапазона скрытых знаков. |
|
Специализированное исполнение текста используется для изменения свойств исполнений текста в его области. Область расширяется до следующего соответствия исполнению текста TextEndOfSegment или до следующего TextEndOfParagraph. |
Любой из предварительно определенных объектов TextRun может быть подклассом. Это позволяет исходному тексту предоставлять модуль форматирования текста с исполнениями текста, включающими пользовательские данные.
В следующем примере демонстрируется использование метода GetTextRun. Этот хранилище текста возвращает объекты TextRun модулю форматирования текста для обработки.
Примечание. |
---|
В этом примере, хранилище текста предоставляет те же свойства текста ко всему тексту. Дополнительные хранилища текста потребуют реализации управления их собственным диапазоном для того, чтобы позволить индивидуальным знакам иметь различные свойства. |
Определение свойств форматирования
Объекты TextRun форматируются с помощью свойств, предоставляемых хранилищем текста. Эти свойства поставляются в двух типах, TextParagraphProperties и TextRunProperties. TextParagraphProperties обрабатывает абзац, включая такие свойства, как TextAlignment и FlowDirection. TextRunProperties являются свойствами, которые могут отличаться для каждого исполнения текста в абзаце, таких как кисть штриховки Typeface и размер шрифта. Для реализации пользовательских абзацев и пользовательских типов свойств исполнений текста, приложение должно создать классы, производные от TextParagraphProperties и TextRunProperties соответственно.