Gewusst wie: Erstellen von Text mit Kontur
In den meisten Fällen fügen Sie Textzeichenfolgen in der Windows Presentation Foundation (WPF)-Anwendung eine Verzierung hinzu, wenn Sie Text in Bezug auf eine Auflistung von diskreten Zeichen oder Glyphen hinzufügen. Sie können beispielsweise einen linearen Farbverlaufspinsel erstellen und auf die Foreground-Eigenschaft eines TextBox-Objekts anwenden. Wenn Sie das Textfeld anzeigen oder bearbeiten, wird der lineare Farbverlaufspinsel automatisch auf den aktuellen Satz von Zeichen in der Textzeichenfolge angewendet.
Sie können jedoch auch Text in Geometry-Objekte konvertieren, sodass Sie andere Arten von visuell ansprechendem Rich-Text erstellen können. Sie können z. B. ein Geometry-Objekt auf Grundlage der Gliederung einer Textzeichenfolge erstellen.
Wenn Text in ein Geometry-Objekt konvertiert wird, stellt er keine Auflistung von Zeichen mehr da, d. h. dass die Zeichen in der Textzeichenfolge nicht geändert werden können. Sie können jedoch die Darstellung des konvertierten Texts durch Ändern der Strich- und Füllungseigenschaften ändern. Der Strich bezieht sich auf die Kontur des konvertierten Texts und die Füllung auf den Bereich innerhalb der Kontur.
Die folgenden Beispiele zeigen verschiedene Möglichkeiten zum Erstellen von visuell ansprechenden Effekten durch Ändern von Strich und Füllung des konvertierten Texts.
Das umgebende Rechteck oder die Hervorhebung des konvertierten Texts kann auch geändert werden. Im folgenden Beispiel wird eine Möglichkeit zum Erstellen visueller Effekte gezeigt, indem Sie den Strich und die Hervorhebung des konvertierten Texts ändern.
Beispiel
Der Schlüssel zum Konvertieren von Text in ein Geometry-Objekt besteht darin, das FormattedText-Objekt zu verwenden. Nachdem Sie dieses Objekt erstellt haben, können Sie die Methoden BuildGeometry und BuildHighlightGeometry verwenden, um den Text in Geometry-Objekte zu konvertieren. Die erste Methode gibt die Geometrie des formatierten Texts zurück; die zweite Methode gibt die Geometrie des umgebenden Rechtecks des formatierten Texts zurück. Im folgenden Codebeispiel wird gezeigt, wie Sie ein FormattedText-Objekt erstellen und die Geometrien des formatierten Texts und dessen umgebenden Rechtecks abrufen.
/// <summary>
/// Create the outline geometry based on the formatted text.
/// </summary>
public void CreateText()
{
System.Windows.FontStyle fontStyle = FontStyles.Normal;
FontWeight fontWeight = FontWeights.Medium;
if (Bold == true) fontWeight = FontWeights.Bold;
if (Italic == true) fontStyle = FontStyles.Italic;
// Create the formatted text based on the properties set.
FormattedText formattedText = new FormattedText(
Text,
CultureInfo.GetCultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface(
Font,
fontStyle,
fontWeight,
FontStretches.Normal),
FontSize,
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.
_textGeometry = formattedText.BuildGeometry(new System.Windows.Point(0, 0));
// Build the geometry object that represents the text highlight.
if (Highlight == true)
{
_textHighLightGeometry = formattedText.BuildHighlightGeometry(new System.Windows.Point(0, 0));
}
}
''' <summary>
''' Create the outline geometry based on the formatted text.
''' </summary>
Public Sub CreateText()
Dim fontStyle As FontStyle = FontStyles.Normal
Dim fontWeight As FontWeight = FontWeights.Medium
If Bold = True Then
fontWeight = FontWeights.Bold
End If
If Italic = True Then
fontStyle = FontStyles.Italic
End If
' Create the formatted text based on the properties set.
Dim formattedText As New FormattedText(Text, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, New Typeface(Font, fontStyle, fontWeight, FontStretches.Normal), FontSize, Brushes.Black) ' This brush does not matter since we use the geometry of the text.
' Build the geometry object that represents the text.
_textGeometry = formattedText.BuildGeometry(New Point(0, 0))
' Build the geometry object that represents the text highlight.
If Highlight = True Then
_textHighLightGeometry = formattedText.BuildHighlightGeometry(New Point(0, 0))
End If
End Sub
Um die abgerufenen Geometry-Objekte anzuzeigen, müssen Sie auf den DrawingContext des Objekts zugreifen, das den konvertierten Text anzeigt. In diesen Codebeispielen wird dieser Zugriff erreicht, indem ein benutzerdefiniertes Steuerelementobjekt erstellt wird, das von einer Klasse abgeleitet wird, die das benutzerdefinierte Rendering unterstützt.
Um Geometry-Objekte im benutzerdefinierten Steuerelement anzuzeigen, stellen Sie eine Außerkraftsetzung für die OnRender-Methode bereit. Ihre außer Kraft gesetzte Methode sollte die DrawGeometry-Methode verwenden, um die Geometry-Objekte zu zeichnen.
/// <summary>
/// OnRender override draws the geometry of the text and optional highlight.
/// </summary>
/// <param name="drawingContext">Drawing context of the OutlineText control.</param>
protected override void OnRender(DrawingContext drawingContext)
{
// Draw the outline based on the properties that are set.
drawingContext.DrawGeometry(Fill, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textGeometry);
// Draw the text highlight based on the properties that are set.
if (Highlight == true)
{
drawingContext.DrawGeometry(null, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textHighLightGeometry);
}
}
''' <summary>
''' OnRender override draws the geometry of the text and optional highlight.
''' </summary>
''' <param name="drawingContext">Drawing context of the OutlineText control.</param>
Protected Overrides Sub OnRender(ByVal drawingContext As DrawingContext)
' Draw the outline based on the properties that are set.
drawingContext.DrawGeometry(Fill, New Pen(Stroke, StrokeThickness), _textGeometry)
' Draw the text highlight based on the properties that are set.
If Highlight = True Then
drawingContext.DrawGeometry(Nothing, New Pen(Stroke, StrokeThickness), _textHighLightGeometry)
End If
End Sub
Informationen zur Quelle des Beispiels des benutzerdefinierten Benutzersteuerelementobjekts finden Sie unter OutlineTextControl.cs für C# und OutlineTextControl.vb für Visual Basic.
Siehe auch
.NET Desktop feedback