Gewusst wie: Zeichnen von Text im Hintergrund eines Steuerelements
Aktualisiert: November 2007
Sie können Text direkt im Hintergrund eines Steuerelements zeichnen, indem Sie die Textzeichenfolge in ein FormattedText-Objekt konvertieren und daraufhin das Objekt im DrawingContext des Steuerelements zeichnen. Sie können diese Vorgehensweise auch verwenden, um im Hintergrund von Objekten zu zeichnen, die aus Panel abgeleitet werden, z. B. Canvas und StackPanel.
Beispiel für Steuerelemente mit benutzerdefinierten Texthintergründen
Beispiel
Um im Hintergrund eines Steuerelements zu zeichnen, erstellen Sie ein neues DrawingBrush-Objekt und zeichnen den konvertierten Text im DrawingContext des Objekts. Danach weisen Sie das neue DrawingBrush-Objekt der Hintergrundeigenschaft des Steuerelements zu.
Im folgenden Codebeispiel wird veranschaulicht, wie Sie ein FormattedText-Objekt erstellen und es im Hintergrund der Objekte Label und Button zeichnen.
// 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;
}
}
Tipp
Das vollständige Codebeispiel, aus dem das folgende Codebeispiel entnommen wurde, finden Sie unter Beispiel zum Zeichnen von Text im Hintergrund eines Steuerelements.
Siehe auch
Konzepte
Zeichnen von formatiertem Text