Partilhar via


Como: Desenhar texto para o plano de fundo de um controle

Você pode desenhar texto diretamente no plano de fundo de um controle convertendo uma cadeia de caracteres de texto em um objeto FormattedText e, em seguida, desenhando o objeto na DrawingContextdo controle. Você também pode usar esta técnica para desenhar no plano de fundo de objetos derivados de Panel, como Canvas e StackPanel.

Captura de tela de controles exibindo texto como plano de fundo.
Exemplo de controles com planos de fundo de texto personalizados

Exemplo

Para desenhar no plano de fundo de um controle, crie um novo objeto DrawingBrush e desenhe o texto convertido para o DrawingContextdo objeto. Em seguida, atribua o novo valor DrawingBrush à propriedade de fundo do controlo.

O exemplo de código a seguir mostra como criar um objeto FormattedText e desenhar no plano de fundo de um objeto Label e de um objeto Button.

// Handle the WindowLoaded event for the window.
private void WindowLoaded(object sender, EventArgs e)
{
    // Update the background property of the label and button.
    myLabel.Background = new DrawingBrush(DrawMyText("My Custom Label"));
    myButton.Background = new DrawingBrush(DrawMyText("Display Text"));
}

// Convert the text string to a geometry and draw it to the control's DrawingContext.
private Drawing DrawMyText(string textString)
{
    // Create a new DrawingGroup of the control.
    DrawingGroup drawingGroup = new DrawingGroup();

    // Open the DrawingGroup in order to access the DrawingContext.
    using (DrawingContext drawingContext = drawingGroup.Open())
    {
        // Create the formatted text based on the properties set.
        FormattedText formattedText = new FormattedText(
            textString,
            CultureInfo.GetCultureInfo("en-us"),
            FlowDirection.LeftToRight,
            new Typeface("Comic Sans MS Bold"),
            48,
            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.
        Geometry textGeometry = formattedText.BuildGeometry(new System.Windows.Point(20, 0));

        // Draw a rounded rectangle under the text that is slightly larger than the text.
        drawingContext.DrawRoundedRectangle(System.Windows.Media.Brushes.PapayaWhip, null, new Rect(new System.Windows.Size(formattedText.Width + 50, formattedText.Height + 5)), 5.0, 5.0);

        // Draw the outline based on the properties that are set.
        drawingContext.DrawGeometry(System.Windows.Media.Brushes.Gold, new System.Windows.Media.Pen(System.Windows.Media.Brushes.Maroon, 1.5), textGeometry);

        // Return the updated DrawingGroup content to be used by the control.
        return drawingGroup;
    }
}

Ver também