Megosztás a következőn keresztül:


Útmutató: Szöveg rajzolása egy vezérlő hátterére

Közvetlenül egy vezérlő hátterére rajzolhat szöveget úgy, hogy átformál egy szöveg-stringet FormattedText objektummá, majd az objektumot a vezérlő DrawingContexttulajdonságára rajzolja. Ezt a technikát arra is használhatja, hogy a Panelszármazó objektumok hátterére rajzoljon, például Canvas és StackPanel.

Háttérként szöveget megjelenítő vezérlők képernyőképe.
Példa egyéni szövegháttérrel rendelkező vezérlőkre

példa

Ha egy vezérlőelem hátterére szeretne rajzolni, hozzon létre egy új DrawingBrush objektumot, és helyezze a konvertált szöveget az objektum DrawingContext-ére. Ezután rendelje hozzá az új DrawingBrush a vezérlő háttértulajdonságához.

Az alábbi példakód bemutatja, hogyan hozhat létre FormattedText objektumot, és hogyan rajzolhat egy Label és Button objektum hátterére.

// 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;
    }
}

Lásd még