Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе представлен обзор функций FormattedText объекта. Этот объект предоставляет низкоуровневый элемент управления для рисования текста в приложениях Windows Presentation Foundation (WPF).
Общие сведения о технологиях
Объект FormattedText позволяет нарисовать многострочный текст, в котором каждый символ в тексте может быть отформатирован по отдельности. В следующем примере показан текст с несколькими форматами, примененным к нему.
Замечание
Для тех разработчиков, которые переносятся из API Win32, в таблице раздела "Миграция Win32 " перечислены флаги Win32 DrawText и приблизительные эквиваленты в Windows Presentation Foundation (WPF).
Причины использования форматированного текста
WPF включает несколько элементов управления для рисования текста на экране. Каждый элемент управления предназначен для другого сценария и имеет собственный список функций и ограничений. Как правило, элемент TextBlock следует использовать, если требуется ограниченная поддержка текста, например краткое предложение в пользовательском интерфейсе. Label можно использовать, если требуется минимальная поддержка текста. Дополнительные сведения см. в разделе "Документы" в WPF.
Объект FormattedText предоставляет более широкие возможности форматирования текста, чем элементы управления текстом Windows Presentation Foundation (WPF) и могут быть полезными в тех случаях, когда вы хотите использовать текст в качестве декоративных элементов. Дополнительные сведения см. в следующем разделе , посвященном преобразованию форматированного текста в геометрию.
Кроме того, FormattedText объект полезен для создания текстовых производных DrawingVisual объектов. DrawingVisual — это упрощенный класс рисования, используемый для отрисовки фигур, изображений или текста. Дополнительные сведения см. в разделе "Тест попадания" с помощью примера DrawingVisuals.
Использование объекта FormattedText
Чтобы создать форматированный текст, вызовите FormattedText конструктор для создания FormattedText объекта. После создания исходной текстовой строки форматирования можно применить диапазон стилей форматирования.
MaxTextWidth Используйте свойство, чтобы ограничить текст определенной шириной. Текст будет автоматически обтекаться, чтобы избежать превышения указанной ширины. MaxTextHeight Используйте свойство, чтобы ограничить текст определенной высотой. Текст будет отображать многоточие "..." для текста, превышающего указанную высоту.
К одному или нескольким символам можно применить несколько стилей форматирования. Например, можно вызвать и SetFontSizeSetForegroundBrush методы, чтобы изменить форматирование первых пяти символов в тексте.
В следующем примере кода создается FormattedText объект, а затем применяется несколько стилей форматирования к тексту.
protected override void OnRender(DrawingContext drawingContext)
{
string testString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor";
// Create the initial formatted text string.
FormattedText formattedText = new FormattedText(
testString,
CultureInfo.GetCultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface("Verdana"),
32,
Brushes.Black);
// Set a maximum width and height. If the text overflows these values, an ellipsis "..." appears.
formattedText.MaxTextWidth = 300;
formattedText.MaxTextHeight = 240;
// Use a larger font size beginning at the first (zero-based) character and continuing for 5 characters.
// The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);
// Use a Bold font weight beginning at the 6th character and continuing for 11 characters.
formattedText.SetFontWeight(FontWeights.Bold, 6, 11);
// Use a linear gradient brush beginning at the 6th character and continuing for 11 characters.
formattedText.SetForegroundBrush(
new LinearGradientBrush(
Colors.Orange,
Colors.Teal,
90.0),
6, 11);
// Use an Italic font style beginning at the 28th character and continuing for 28 characters.
formattedText.SetFontStyle(FontStyles.Italic, 28, 28);
// Draw the formatted text string to the DrawingContext of the control.
drawingContext.DrawText(formattedText, new Point(10, 0));
}
Protected Overrides Sub OnRender(ByVal drawingContext As DrawingContext)
Dim testString As String = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"
' Create the initial formatted text string.
Dim formattedText As New FormattedText(testString, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, New Typeface("Verdana"), 32, Brushes.Black)
' Set a maximum width and height. If the text overflows these values, an ellipsis "..." appears.
formattedText.MaxTextWidth = 300
formattedText.MaxTextHeight = 240
' Use a larger font size beginning at the first (zero-based) character and continuing for 5 characters.
' The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5)
' Use a Bold font weight beginning at the 6th character and continuing for 11 characters.
formattedText.SetFontWeight(FontWeights.Bold, 6, 11)
' Use a linear gradient brush beginning at the 6th character and continuing for 11 characters.
formattedText.SetForegroundBrush(New LinearGradientBrush(Colors.Orange, Colors.Teal, 90.0), 6, 11)
' Use an Italic font style beginning at the 28th character and continuing for 28 characters.
formattedText.SetFontStyle(FontStyles.Italic, 28, 28)
' Draw the formatted text string to the DrawingContext of the control.
drawingContext.DrawText(formattedText, New Point(10, 0))
End Sub
Единица измерения размера шрифта
Как и в других текстовых объектах в приложениях Windows Presentation Foundation (WPF), FormattedText объект использует независимые от устройства пиксели в качестве единицы измерения. Однако большинство приложений Win32 используют точки в качестве единицы измерения. Если вы хотите использовать отображаемый текст в единицах точек в приложениях Windows Presentation Foundation (WPF), необходимо преобразовать независимые от устройства единицы (1/96-й дюйм на единицу) в точки. В следующем примере кода показано, как выполнить это преобразование.
// The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);
' The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5)
Преобразование форматированного текста в геометрию
Форматированный текст можно преобразовать в Geometry объекты, позволяя создавать другие типы визуально интересного текста. Например, можно создать объект Geometry на основе структуры текстовой строки.
В следующих примерах показано несколько способов создания интересных визуальных эффектов путем изменения штриха, заливки и выделения преобразованного текста.
Если текст преобразуется в объект Geometry, он больше не является коллекцией символов— нельзя изменять символы в текстовой строке. Однако вы можете повлиять на внешний вид преобразованного текста, изменив его штрих и свойства заливки. Росчерк ссылается на контур преобразованного текста; Заливка ссылается на область внутри контура преобразованного текста. Дополнительные сведения см. в разделе "Создание контурного текста".
Вы также можете преобразовать форматированный текст в PathGeometry объект и использовать его для выделения текста. Например, можно применить анимацию к PathGeometry объекту, чтобы анимация следовали контуру отформатированного текста.
В следующем примере показан форматированный текст, преобразованный в PathGeometry объект. Анимированный эллипс движется по траектории отрисованного текста.
Сфера, следующая геометрии пути текста
Дополнительные сведения см. в разделе "Практическое руководство. Создание анимации PathGeometry для текста".
Вы можете создать другие интересные методы для отформатированного текста после его преобразования в PathGeometry объект. Например, вы можете клипировать видео для отображения внутри него.
Миграция Win32
Функции рисования FormattedText текста похожи на функции Win32 DrawText. Для тех разработчиков, которые переносятся из API Win32, в следующей таблице перечислены флаги Win32 DrawText и приблизительные эквиваленты в Windows Presentation Foundation (WPF).
| Флаг DrawText | Эквивалент WPF | Примечания. |
|---|---|---|
| DT_BOTTOM | Height | Используйте свойство Height для вычисления соответствующей позиции 'y' для Win32 DrawText. |
| DT_CALCRECT | Height, Width | Используйте свойства Height и Width для вычисления выходного прямоугольника. |
| DT_CENTER | TextAlignment | TextAlignment Используйте свойство с заданным Centerзначением. |
| DT_EDITCONTROL | Отсутствует | Необязательно. Ширина пробела и отрисовка последней строки совпадают с элементом управления редактирования в фреймворке. |
| DT_КОНЕЦ_МНОГОТОЧИЯ | Trimming | Используйте свойство Trimming со значением CharacterEllipsis. Используйте WordEllipsis, чтобы получить Win32 DT_END_ELLIPSIS с концом в виде многоточия DT_WORD_ELIPSIS — в этом случае многоточие добавляется только к словам, которые не помещаются в одну строку. |
| DT_EXPAND_TABS | Отсутствует | Необязательно. Вкладки автоматически развертываются, чтобы остановить каждые 4 эмс, что примерно равно ширине 8 символов, независимых от языка. |
| DT_EXTERNALLEADING | Отсутствует | Необязательно. Внешний ведущий всегда включается в интервалы строк. LineHeight Используйте свойство для создания определяемого пользователем интервала строк. |
| DT_HIDEPREFIX | Отсутствует | Не поддерживается. Удалите '&' из строки перед созданием FormattedText объекта. |
| DT_LEFT | TextAlignment | Это выравнивание текста по умолчанию. TextAlignment Используйте свойство с заданным Leftзначением. (только WPF) |
| DT_MODIFYSTRING | Отсутствует | Не поддерживается. |
| DT_NOCLIP | VisualClip | Вырезка не происходит автоматически. Если вы хотите обрезать текст, используйте VisualClip свойство. |
| DT_NOFULLWIDTHCHARBREAK | Отсутствует | Не поддерживается. |
| DT_NOPREFIX | Отсутствует | Необязательно. Символ '&' в строках всегда рассматривается как обычный символ. |
| DT_PATHELLIPSIS | Отсутствует | Используйте свойство Trimming со значением WordEllipsis. |
| DT_PREFIX | Отсутствует | Не поддерживается. Для использования подчеркивания в тексте, например, для клавиш ускорения или ссылок, используйте метод SetTextDecorations. |
| DT_PREFIXONLY | Отсутствует | Не поддерживается. |
| DT_RIGHT | TextAlignment | TextAlignment Используйте свойство с заданным Rightзначением. (только WPF) |
| DT_RTLREADING | FlowDirection | Задайте для свойства FlowDirection значение RightToLeft. |
| DT_SINGLELINE | Отсутствует | Необязательно. FormattedText объекты ведут себя как единое управление линией, если не задано свойство MaxTextWidth или текст содержит возврат каретки/перевод строки (CR/LF). |
| DT_TABSTOP | Отсутствует | Поддержка позиций остановки табуляции, определяемых пользователем, не поддерживается. |
| DT_TOP | Height | Необязательно. Основное обоснование — это значение по умолчанию. Другие значения вертикального позиционирования можно определить с помощью Height свойства для вычисления соответствующей позиции Win32 DrawText "y". |
| DT_VCENTER | Height | Используйте свойство Height для вычисления соответствующей позиции 'y' для Win32 DrawText. |
| DT_WORDBREAK | Отсутствует | Необязательно. Разделение слов происходит автоматически с FormattedText объектами. Вы не можете отключить его. |
| DT_WORD_ELLIPSIS | Trimming | Используйте свойство Trimming со значением WordEllipsis. |
См. также
.NET Desktop feedback