Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können Text direkt im Hintergrund eines Steuerelements zeichnen, indem Sie eine Textzeichenfolge in ein FormattedText-Objekt konvertieren und das Objekt anschließend im DrawingContext-Element des Steuerelements zeichnen. Sie können diese Methode auch zum Zeichnen im Hintergrund von Objekten verwenden, die von Panel abgeleitet sind, z. B. Canvas und StackPanel.
Beispiel für Steuerelemente mit benutzerdefinierten Texthintergründen
Beispiel
Um in den Hintergrund eines Steuerelements zu zeichnen, erstellen Sie ein neues DrawingBrush-Objekt, und zeichnen Sie dann den konvertierten Text in das DrawingContext-Element des Objekts. Weisen Sie dann den neuen Wert DrawingBrush der Hintergrundeigenschaft des Steuerelements zu.
Im folgenden Codebeispiel wird veranschaulicht, wie Sie ein neues FormattedText-Objekt erstellen und im Hintergrund eines Label- und Button-Objekts 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;
}
}
Siehe auch
.NET Desktop feedback