Show / Hide Table of Contents

Практическое руководство. Создание контурного текста

В большинстве случаев при добавлении декоративных элементов в текстовые строки в вашей Windows Presentation Foundation (WPF) приложения, вы используете текст в виде коллекции дискретных символов или глифов. Например, можно создать кисть линейного градиента и применить его к Foreground свойство TextBox объекта. При отображении или измените текстовое поле, кисти линейного градиента применяется автоматически в текущий набор символов в текстовой строке.

Текст, отображенный при помощи кисти линейного градиента

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

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

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

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

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

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

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

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

Пример

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

/// <summary>
/// Create the outline geometry based on the formatted text.
/// </summary>
public void CreateText()
{
    System.Windows.FontStyle fontStyle = FontStyles.Normal;
    FontWeight fontWeight = FontWeights.Medium;

    if (Bold == true) fontWeight = FontWeights.Bold;
    if (Italic == true) fontStyle = FontStyles.Italic;

    // Create the formatted text based on the properties set.
    FormattedText formattedText = new FormattedText(
        Text,
        CultureInfo.GetCultureInfo("en-us"),
        FlowDirection.LeftToRight,
        new Typeface(
            Font,
            fontStyle,
            fontWeight,
            FontStretches.Normal),
        FontSize,
        System.Windows.Media.Brushes.Black // This brush does not matter since we use the geometry of the text.
        );

    // Build the geometry object that represents the text.
    _textGeometry = formattedText.BuildGeometry(new System.Windows.Point(0, 0));

    // Build the geometry object that represents the text highlight.
    if (Highlight == true)
    {
        _textHighLightGeometry = formattedText.BuildHighlightGeometry(new System.Windows.Point(0, 0));
    }
}

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

Для отображения Geometry объектов в пользовательском элементе управления, переопределите для OnRender метод. Переопределенный метод должен использовать DrawGeometry метод для отображения Geometry объектов.

/// <summary>
/// OnRender override draws the geometry of the text and optional highlight.
/// </summary>
/// <param name="drawingContext">Drawing context of the OutlineText control.</param>
protected override void OnRender(DrawingContext drawingContext)
{
    // Draw the outline based on the properties that are set.
    drawingContext.DrawGeometry(Fill, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textGeometry);

    // Draw the text highlight based on the properties that are set.
    if (Highlight == true)
    {
        drawingContext.DrawGeometry(null, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textHighLightGeometry);
    }
}

Источник объекта пример настраиваемого пользовательского элемента управления, см. в разделе OutlineTextControl.cs для C# и OutlineTextControl.vb для Visual Basic.

См. также

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