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.
Dieses Thema enthält eine Übersicht über die Funktionen des FormattedText-Objekts. Dieses Objekt bietet eine niederstufige Steuerung für das Zeichnen von Text in Windows Presentation Foundation (WPF)-Anwendungen.
Technologieübersicht
Mit dem FormattedText-Objekt können Sie mehrzeiligen Text zeichnen, in dem jedes Zeichen im Text einzeln formatiert werden kann. Das folgende Beispiel zeigt Text, auf den mehrere Formate angewendet wurden.
Hinweis
Für Entwickler, die von der Win32-API zur Windows Presentation Foundation (WPF) migrieren, listet die Tabelle im Abschnitt Win32-Migration die Win32 DrawText-Flags und deren ungefähre Entsprechungen auf.
Gründe für die Verwendung von formatiertem Text
WPF enthält mehrere Steuerelemente zum Zeichnen von Text auf dem Bildschirm. Jedes Steuerelement ist auf ein anderes Szenario ausgerichtet und verfügt über eine eigene Liste von Features und Einschränkungen. Im Allgemeinen sollte das TextBlock-Element verwendet werden, wenn eine eingeschränkte Textunterstützung erforderlich ist, z. B. einen kurzen Satz auf einer Benutzeroberfläche. Label kann verwendet werden, wenn eine minimale Textunterstützung erforderlich ist. Weitere Informationen finden Sie unter Dokumente in WPF.
Das FormattedText-Objekt bietet größere Textformatierungsfeatures als Windows Presentation Foundation (WPF)-Textsteuerelemente und kann in Fällen hilfreich sein, in denen Sie Text als dekoratives Element verwenden möchten. Weitere Informationen finden Sie im folgenden Abschnitt Konvertieren von formatiertem Text in eine Geometrie.
Darüber hinaus ist das FormattedText-Objekt nützlich, um textorientierte DrawingVisual-abgeleitete Objekte zu erstellen. DrawingVisual ist eine einfache Zeichnungsklasse, die zum Rendern von Formen, Bildern oder Text verwendet wird. Weitere Informationen finden Sie unter Beispiel für Treffertests mit „DrawingVisuals“.
Verwenden des FormattedText-Objekts
Rufen Sie zum Erstellen von formatiertem Text den FormattedText-Konstruktor auf, um ein FormattedText-Objekt zu erstellen. Nachdem Sie eine ursprünglich formatierte Textzeichenfolge erstellt haben, können Sie eine Reihe von Formatierungsstilen anwenden.
Verwenden Sie die eigenschaft MaxTextWidth, um den Text auf eine bestimmte Breite zu beschränken. Der Text wird automatisch umgebrochen, um die angegebene Breite nicht zu überschreiten. Verwenden Sie die eigenschaft MaxTextHeight, um den Text auf eine bestimmte Höhe zu beschränken. Der Text zeigt Auslassungspunkte (...) an, wenn die angegebene Höhe überschritten wird.
Sie können mehrere Formatvorlagen auf ein oder mehrere Zeichen anwenden. Sie können z. B. die methoden SetFontSize und SetForegroundBrush aufrufen, um die Formatierung der ersten fünf Zeichen im Text zu ändern.
Im folgenden Codebeispiel wird ein FormattedText-Objekt erstellt und anschließend mehrere Formatvorlagen auf den Text angewendet.
protected override void OnRender(DrawingContext drawingContext)
{
string testString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor";
// Create the initial formatted text string.
FormattedText formattedText = new FormattedText(
testString,
CultureInfo.GetCultureInfo("en-us"),
FlowDirection.LeftToRight,
new Typeface("Verdana"),
32,
Brushes.Black);
// Set a maximum width and height. If the text overflows these values, an ellipsis "..." appears.
formattedText.MaxTextWidth = 300;
formattedText.MaxTextHeight = 240;
// Use a larger font size beginning at the first (zero-based) character and continuing for 5 characters.
// The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);
// Use a Bold font weight beginning at the 6th character and continuing for 11 characters.
formattedText.SetFontWeight(FontWeights.Bold, 6, 11);
// Use a linear gradient brush beginning at the 6th character and continuing for 11 characters.
formattedText.SetForegroundBrush(
new LinearGradientBrush(
Colors.Orange,
Colors.Teal,
90.0),
6, 11);
// Use an Italic font style beginning at the 28th character and continuing for 28 characters.
formattedText.SetFontStyle(FontStyles.Italic, 28, 28);
// Draw the formatted text string to the DrawingContext of the control.
drawingContext.DrawText(formattedText, new Point(10, 0));
}
Protected Overrides Sub OnRender(ByVal drawingContext As DrawingContext)
Dim testString As String = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor"
' Create the initial formatted text string.
Dim formattedText As New FormattedText(testString, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, New Typeface("Verdana"), 32, Brushes.Black)
' Set a maximum width and height. If the text overflows these values, an ellipsis "..." appears.
formattedText.MaxTextWidth = 300
formattedText.MaxTextHeight = 240
' Use a larger font size beginning at the first (zero-based) character and continuing for 5 characters.
' The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5)
' Use a Bold font weight beginning at the 6th character and continuing for 11 characters.
formattedText.SetFontWeight(FontWeights.Bold, 6, 11)
' Use a linear gradient brush beginning at the 6th character and continuing for 11 characters.
formattedText.SetForegroundBrush(New LinearGradientBrush(Colors.Orange, Colors.Teal, 90.0), 6, 11)
' Use an Italic font style beginning at the 28th character and continuing for 28 characters.
formattedText.SetFontStyle(FontStyles.Italic, 28, 28)
' Draw the formatted text string to the DrawingContext of the control.
drawingContext.DrawText(formattedText, New Point(10, 0))
End Sub
Maßeinheit für den Schriftgrad
Wie bei anderen Textobjekten in Windows Presentation Foundation (WPF)-Anwendungen verwendet das FormattedText-Objekt geräteunabhängige Pixel als Maßeinheit. Die meisten Win32-Anwendungen verwenden jedoch Punkte als Maßeinheit. Wenn Sie Anzeigetext in Punkteinheiten in Windows Presentation Foundation (WPF)-Anwendungen verwenden möchten, müssen Sie geräteunabhängige Einheiten (1/96. Zoll pro Einheit) in Punkte umwandeln. Das folgende Codebeispiel zeigt, wie Sie diese Konvertierung ausführen.
// The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5);
' The font size is calculated in terms of points -- not as device-independent pixels.
formattedText.SetFontSize(36 * (96.0 / 72.0), 0, 5)
Konvertieren von formatiertem Text in eine Geometrie
Sie können formatierten Text in Geometry Objekte konvertieren, sodass Sie andere Arten von visuell interessantem Text erstellen können. Sie können z. B. ein Geometry-Objekt basierend auf der Gliederung einer Textzeichenfolge erstellen.
Die folgenden Beispiele veranschaulichen verschiedene Möglichkeiten, interessante visuelle Effekte zu erzeugen, indem der Strich, die Füllung und die Hervorhebung vom konvertierten Text geändert werden.
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. Weitere Informationen finden Sie unter Erstellen von Text mit Kontur.
Sie können auch formatierten Text in ein PathGeometry-Objekt konvertieren und das Objekt zum Hervorheben des Texts verwenden. Sie können beispielsweise eine Animation auf das PathGeometry-Objekt anwenden, sodass die Animation der Gliederung des formatierten Texts folgt.
Das folgende Beispiel zeigt formatierten Text, der in ein PathGeometry-Objekt konvertiert wurde. Eine animierte Ellipse folgt dem Strichpfad des gerenderten Texts.
folgt
Kugel, die der Pfadgeometrie des Textes folgt
Weitere Informationen finden Sie unter Erstellen einer PathGeometry-Animation für Text.
Sie können andere interessante Verwendungsmöglichkeiten für formatierten Text erstellen, nachdem sie in ein PathGeometry-Objekt konvertiert wurde. Sie können zum Beispiel Videomaterial zuschneiden, um es darin anzuzeigen.
angezeigt wird
Win32-Migration
Die Features von FormattedText für Zeichnungstext ähneln den Features der Win32 DrawText-Funktion. Für Entwickler, die von der Win32-API migrieren, werden in der folgenden Tabelle die Win32 DrawText-Flags und die ungefähre Entsprechung in Windows Presentation Foundation (WPF) aufgeführt.
DrawText-Flag | WPF-Entsprechung | Hinweise |
---|---|---|
DT_BOTTOM | Height | Verwenden Sie die Height-Eigenschaft, um eine geeignete Y-Position für DrawText von Win32 zu berechnen. |
DT_CALCRECT | Height, Width | Verwenden Sie die Eigenschaften Height und Width, um das Ausgaberechteck zu berechnen. |
DT_CENTER | TextAlignment | Verwenden Sie die TextAlignment-Eigenschaft mit dem auf Center festgelegten Wert. |
DT_EDITCONTROL | Nichts | Nicht erforderlich. Das Rendern der Abstandsbreite und der letzten Zeile ist identisch mit dem edit-Steuerelement für das Framework. |
DT_END_ELLIPSIS | Trimming | Verwenden Sie die Trimming-Eigenschaft mit dem Wert CharacterEllipsis. Verwenden Sie WordEllipsis, um DT_END_ELLIPSIS von Win32 mit der Endellipse DT_WORD_ELIPSIS zu erhalten. In diesem Fall erfolgt die Zeichenellipse nur bei Wörtern, die nicht in eine einzige Zeile passen. |
DT_EXPAND_TABS | Nichts | Nicht erforderlich. Registerkarten werden automatisch auf Zwischenstopps nach jeweils 4 em erweitert. Dies entspricht etwa der Breite von 8 sprachunabhängigen Zeichen. |
DT_EXTERNALLEADING | Nichts | Nicht erforderlich. Der externe Abstand ist immer im Zeilenabstand enthalten. Verwenden Sie die LineHeight-Eigenschaft, um einen benutzerdefinierten Zeilenabstand zu erstellen. |
DT_HIDEPREFIX | Nichts | Nicht unterstützt. Entfernen Sie '&' aus der Zeichenfolge, bevor Sie das FormattedText-Objekt erstellen. |
DT_LEFT | TextAlignment | Dies ist die Standardtextausrichtung. Verwenden Sie die TextAlignment-Eigenschaft mit dem auf Left festgelegten Wert. (nur WPF) |
DT_MODIFYSTRING | Nichts | Nicht unterstützt. |
DT_NOCLIP | VisualClip | Das Clipping erfolgt nicht automatisch. Wenn Sie Text ausschneiden möchten, verwenden Sie die eigenschaft VisualClip. |
DT_NOFULLWIDTHCHARBREAK | Nichts | Nicht unterstützt. |
DT_NOPREFIX | Nichts | Nicht erforderlich. Das Zeichen "&" in Zeichenfolgen wird immer als normales Zeichen behandelt. |
DT_PATHELLIPSIS | Nichts | Verwenden Sie die Trimming-Eigenschaft mit dem Wert WordEllipsis. |
DT_PREFIX | Nichts | Nicht unterstützt. Verwenden Sie die SetTextDecorations-Methode für Unterstriche im Text, wie etwa bei Zugriffstasten oder Links. |
DT_PREFIXONLY | Nichts | Nicht unterstützt. |
DT_RIGHT | TextAlignment | Verwenden Sie die TextAlignment-Eigenschaft mit dem auf Right festgelegten Wert. (nur WPF) |
DT_RTLREADING | FlowDirection | Legen Sie die FlowDirection-Eigenschaft auf RightToLeft fest. |
DT_SINGLELINE | Nichts | Nicht erforderlich. FormattedText-Objekte verhalten sich wie Steuerelemente für einzelne Textzeilen, wenn nicht entweder die MaxTextWidth-Eigenschaft festgelegt wird oder der Text einen Wagenrücklauf (Carriage Return, CR) bzw. Zeilenvorschub (Line Feed, LF) enthält. |
DT_TABSTOP | Nichts | Keine Unterstützung für benutzerdefinierte Tabstopppositionen. |
DT_TOP | Height | Nicht erforderlich. Die obere Ausrichtung ist die Standardeinstellung. Andere vertikale Positionierungswerte können mithilfe der Height-Eigenschaft definiert werden, um eine entsprechende Win32 DrawText "y"-Position zu berechnen. |
DT_VCENTER | Height | Verwenden Sie die Height-Eigenschaft, um eine geeignete Y-Position für DrawText von Win32 zu berechnen. |
DT_WORDBREAK | Nichts | Nicht erforderlich. Die Wörtertrennung erfolgt bei FormattedText-Objekten automatisch. Sie können sie nicht deaktivieren. |
DT_WORD_ELLIPSIS | Trimming | Verwenden Sie die Trimming-Eigenschaft mit dem Wert WordEllipsis. |
Siehe auch
.NET Desktop feedback