Partilhar via


Como: Draw Text to a Control's Background

Você pode desenhar texto diretamente no plano de fundo de um controle ao converter uma sequência de texto em um objeto FormattedText e, em seguida, desenhando o objeto para o DrawingContext do controle. Você também pode usar essa técnica para desenhar no plano de fundo dos objetos derivados de Panel, tais como Canvas e StackPanel.

Exemplo dos controles com planos de fundo de texto personalizados

Controles exibindo texto como plano de fundo

Exemplo

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

O exemplo de código a seguir mostra como criar um objeto FormattedText e desenhar para o plano de fundo do objeto Label e 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;
    }
}
ObservaçãoObservação:

Para obter o código completo exemplo de que o exemplo de código a seguir foi extraído, consulte Desenhar texto para exemplo de plano de fundo do Controlarar.

Consulte também

Conceitos

Drawing Formatted Text

Referência

FormattedText