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.
In den meisten Fällen, wenn Sie Ornamentik zu Textzeichenfolgen in Ihrer Windows Presentation Foundation (WPF)-Anwendung hinzufügen, betrachten Sie Text als eine Sammlung von einzelnen Zeichen oder Glyphen. 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 reichhaltigem Text erstellen können. Sie können z. B. ein Geometry-Objekt basierend auf der Gliederung einer Textzeichenfolge erstellen.
Wenn Text in ein Geometry-Objekt konvertiert wird, handelt es sich nicht mehr um eine Auflistung von Zeichen. Sie können die Zeichen in der Textzeichenfolge nicht ändern. 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 veranschaulichen verschiedene Möglichkeiten, visuelle Effekte zu erzeugen, indem der Strich und die Füllung von konvertiertem Text geändert werden.
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 BuildGeometry und BuildHighlightGeometry Methoden 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
Die Quelle des Beispielobjekts für ein benutzerdefiniertes Benutzersteuerelement finden Sie in OutlineTextControl.cs für C# und OutlineTextControl.vb für Visual Basic.
Siehe auch
.NET Desktop feedback