Compartilhar via


Como: Desenhar a borda de um texto

Na maioria dos casos, ao adicionar ornamentação a sequências de texto no seu aplicativo Windows Presentation Foundation (WPF), você está usando texto como um conjunto de caracteres distintos, ou glifos. Por exemplo, você pode criar um pincel de gradiente linear e aplicá-lo à propriedade Foreground de um objeto TextBox. Quando você exibir ou editar a caixa de texto, o pincel de gradiente linear será automaticamente aplicado ao conjunto de caracteres atual na string.

Exemplo de um pincel de gradiente linear aplicado a uma caixa de texto

Texto exibido com um pincel de gradiente linear

No entanto, você também pode converter o texto em objetos Geometry, permitindo que você crie outros tipos de texto visualmente atrativo. Por exemplo, você pode criar um objeto Geometry com base no contorno de um string de texto.

Exemplo de um pincel de gradiente linear aplicado à geometria do contorno do texto

Contorno do texto usando um pincel de gradiente linear

Quando o texto é convertido em um objeto Geometry ele não é mais um conjunto de caracteres — você não pode modificar os caracteres na sequência de texto. No entanto, você pode afetar a aparência do texto convertido modificando suas propriedades de "pincelada" e de preenchimento. A "pincelada", ou "traço", refere-se ao contorno do texto convertido; o preenchimento refere-se a área dentro o contorno do texto convertido.

Os exemplos a seguir ilustram várias maneiras de criar efeitos visuais, modificando a "pincelada" e o preenchimento do texto convertido.

Exemplo de definição de traço e preenchimento com diferentes cores.

Texto com cores diferentes de preenchimento e traço

Exemplo de um pincel de imagem aplicado ao traço

Texto com pincel de imagem aplicado ao traço

Também é possível modificar o retângulo da caixa delimitadora, ou o realce, do texto convertido. O exemplo a seguir ilustra uma maneira de criar efeitos visuais modificando a pincelada e o realce do texto convertido.

Exemplo de um pincel de imagem aplicado ao traço e destaque.

Texto com pincel de imagem aplicado ao traço

ObservaçãoObservação:

Para obter a amostra de código completo do qual os exemplos de código a seguir foram extraídos, consulte Descrito exemplo de Controlarar do texto Personalizar.

Exemplo

A chave para converter texto em um objeto Geometry é usar o objeto FormattedText. Depois de criar esse objeto, você pode usar os métodos BuildGeometry e BuildHighlightGeometry para converter o texto em objetos Geometry. O primeiro método retornará a geometria do texto formatado; o segundo método retornará a geometria da caixa delimitadora do texto formatado. O exemplo de código a seguir mostra como criar um objeto FormattedText e recuperar as geometrias do texto formatado e da caixa delimitadora.

/// <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 hightlight.
    if (Highlight == true)
    {
        _textHighLightGeometry = formattedText.BuildHighlightGeometry(new System.Windows.Point(0, 0));
    }
}

Para exibir os objetos Geometry recuperados você precisa acessar o DrawingContext do objeto que está exibindo o texto convertido. Nesses exemplos de código, isso é feito criando um objeto controle personalizado que é derivado de uma classe que ofereça suporte a renderização definida pelo usuário. Para obter detalhes sobre como criar um controle personalizado, consulte Descrito exemplo de Controlarar do texto Personalizar.

Para exibir objetos Geometry no controle personalizado, sobrescreva o método OnRender. O método sobrescrito deve usar o método DrawGeometry para desenhar os objetos 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);
    }
}

Consulte também

Tarefas

Descrito exemplo de Controlarar do texto Personalizar

Conceitos

Drawing Formatted Text