Show / Hide Table of Contents

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

В этом разделе представлен обзор функций FormattedText объекта. Этот объект предоставляет низкоуровневый элемент управления для рисования текста в приложениях Windows Presentation Foundation (WPF).

Общие сведения о технологии

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

Отображенный текст с использованием объекта FormattedText

Note

Для разработчиков, осуществляющих переход с API Win32, в таблице из раздела Миграция Win32 перечислены флаги DrawText Win32 и примерный эквивалент в Windows Presentation Foundation (WPF).

Причины использования форматированного текста

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

FormattedText Объект предоставляет больше функций, чем форматирования текста Windows Presentation Foundation (WPF) текстовых элементов управления и могут быть полезны в тех случаях, когда использовать текст как декоративный элемент. Дополнительные сведения см. в следующем разделе: Преобразование форматированного текста в геометрический объект.

Кроме того FormattedText объект удобна для создания ориентированных на текст DrawingVisual-объекты, производные от. DrawingVisual — Это упрощенный класс, используемый для отрисовки фигур, изображений и текста. Дополнительные сведения см. в разделе Пример проверки нажатия с использованием DrawingVisuals.

Использование объекта FormattedText

Чтобы создать форматированный текст, вызовите FormattedText конструктор для создания FormattedText объекта. После создания исходной строки форматированного текста можно применить ряд стилей форматирования.

Используйте MaxTextWidth свойство для ограничения текста по ширине. Текст будет автоматически перенесен, чтобы заданная ширина не была нарушена. Используйте MaxTextHeight свойство для ограничения текста по высоте. Если текст выходит за указанные пределы по высоте, отображается многоточие (…).

Текст, отображаемый с переноса слов и многоточием.

К одному или более символам можно применить несколько стилей форматирования. Например, можно вызвать оба SetFontSize и SetForegroundBrush методы для изменения форматирования первые пять символов в тексте.

В следующем примере кода создается 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));
}

Единица измерения "Размер шрифта"

Как и в случае с другими текстовыми объектами в 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);

Преобразование форматированного текста в геометрический объект

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

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

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

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

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

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

Если текст преобразуется в Geometry объекта, он больше не является набором символов — изменение символов в текстовой строке невозможно. Тем не менее можно повлиять на внешний вид преобразованного текст, изменив его свойства штриха и заливки. Штрих — это контур преобразованного текста; заливка — это область внутри контура преобразованного текста. Дополнительные сведения см. в разделе Создание контурного текста.

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

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

Сфера, следующая по геометрическому пути текста
Сфера, следующая по геометрическому пути текста

Дополнительные сведения см. в разделе Как Создание анимации PathGeometry для текста.

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

Отображение видео по геометрическому пути текста

Миграция Win32

Возможности FormattedText для рисования текста похожи на возможности Win32 функции DrawText. Для разработчиков, осуществляющих переход с API Win32, в таблице перечислены флаги DrawText Win32 и примерный эквивалент в Windows Presentation Foundation (WPF).

Флаг DrawText Эквивалент WPF Примечания
DT_BOTTOM Height Используйте Height свойство для вычисления соответствующей Win32 позиции DrawText «y».
DT_CALCRECT Height, Width Используйте Height и Width для вычисления выходного прямоугольника.
DT_CENTER TextAlignment Используйте TextAlignment свойство со значением, равным Center.
DT_EDITCONTROL Нет Не требуется. Ширина пробелов и отрисовка последней строки соответствуют этим параметрам в элементе управления редактированием среды.
DT_END_ELLIPSIS Trimming Используйте Trimming свойством со значением CharacterEllipsis.

Используйте WordEllipsis для получения Win32 DT_END_ELLIPSIS с конечным многоточием — в этом случае символ многоточия происходит только по словам, которые не помещаются на одной строке.
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 свойство для вычисления соответствующей Win32 позиции DrawText «y».
DT_WORDBREAK Нет Не требуется. Перенос слов выполняется автоматически с FormattedText объектов. Его нельзя отключить.
DT_WORD_ELLIPSIS Trimming Используйте Trimming свойством со значением WordEllipsis.

См. также

  • FormattedText
  • Документы в WPF
  • Оформление в WPF
  • Создание контурного текста
  • Практическое руководство. Создание анимации PathGeometry для текста
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX