Zeichnen von formatiertem Text
Aktualisiert: November 2007
Dieses Thema enthält eine Übersicht über die Features des FormattedText-Objekts. Dieses Objekt bietet eine Steuerung auf niedriger Ebene zum Zeichnen von Text in Windows Presentation Foundation (WPF)-Anwendungen.
Dieses Thema enthält folgende Abschnitte.
- Übersicht über die Technologie
- Verwenden des FormattedText-Objekts
- Win32-Migration
- Verwandte Abschnitte
Übersicht über die Technologie
Das FormattedText-Objekt ermöglicht das Zeichnen von mehrzeiligem Text, in dem jedes Zeichen einzeln formatiert werden kann. Im folgenden Beispiel wird Text veranschaulicht, auf den mehrere Formate angewendet wurden.
Angezeigter Text mit FormattedText-Methode
Tipp
Für Entwickler, die von der Win32-API migrieren, enthält die Tabelle im Abschnitt Win32-Migration eine Auflistung der Win32-DrawText-Flags und die jeweilige Entsprechung in Windows Presentation Foundation (WPF).
Gründe für das Verwenden von formatiertem Text
WPF enthält mehrere Steuerelemente, um Text auf dem Bildschirm zeichnen zu können. Jedes Steuerelement richtet sich an ein anderes Szenario und verfügt über seine individuellen Features und Einschränkungen. Im Allgemeinen sollte das TextBlock-Element verwendet werden, wenn eine eingeschränkte Textunterstützung erforderlich ist, z. B. ein kurzer Satz in einer Benutzeroberfläche (user interface, UI). Label kann verwendet werden, wenn nur ein Minimum an Textunterstützung erforderlich ist. Weitere Informationen finden Sie unter Dokumente in Windows Presentation Foundation.
Das FormattedText-Objekt bietet umfassendere Textformatierungsfeatures als Windows Presentation Foundation (WPF)-Textsteuerelemente und kann hilfreich sein, wenn Sie Text als ein dekoratives Element verwenden möchten. Weitere Informationen finden Sie im folgenden Abschnitt, Konvertieren von formatiertem Text in eine Geometrie.
Zusätzlich ist das FormattedText-Objekt hilfreich beim Erstellen textorientierter, von DrawingVisual abgeleiteter Objekte. 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
Wenn Sie formatierten Text erstellen möchten, rufen Sie den FormattedText-Konstruktor auf, um ein FormattedText-Objekt zu erstellen. Nachdem Sie die formatierte Anfangs-Textzeichenfolge erstellt haben, können Sie eine Reihe von Formatierungsstilen anwenden.
Verwenden Sie die MaxTextWidth-Eigenschaft, um den Text auf eine bestimmte Breite zu begrenzen. Der Text wird automatisch umgebrochen, damit vermieden wird, dass er die angegebene Breite überschreitet. Verwenden Sie die MaxTextHeight-Eigenschaft, um den Text auf eine bestimmte Höhe zu begrenzen. Der Text zeigt Auslassungspunkte (...) für den Text an, der die angegebene Höhe überschreitet.
Angezeigter Text mit Zeilenumbruch und Auslassungspunkten
Sie können mehrere Formatierungsstile auf ein oder mehrere Zeichen anwenden. Sie könnten z. B. sowohl die SetFontSize-Methode als auch die SetForegroundBrush-Methode aufrufen, um die Formatierung der ersten fünf Zeichen im Text zu ändern.
Im folgenden Codebeispiel wird ein FormattedText-Objekt erstellt, und anschließend werden mehrere Formatierungsstile 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));
}
Schriftgradmaßeinheit
Wie andere Textobjekte in Windows Presentation Foundation (WPF)-Anwendungen muss auch das FormattedText-Objekt geräteunabhängige Pixel als Maßeinheit verwenden. Die meisten Win32-Anwendungen verwenden jedoch Punkte als Maßeinheit. Wenn Sie Anzeigetext in Windows Presentation Foundation (WPF)-Anwendungen in Punkteinheiten verwenden möchten, müssen Sie geräteunabhängige Einheiten (1/96th inch per unit) in Punkte konvertieren. Im folgenden Codebeispiel wird gezeigt, wie diese Konvertierung ausgeführt wird.
// 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
Formatierter Text kann in Geometry-Objekte umgewandelt werden, sodass Sie andere visuell interessante Textarten erstellen können. Sie können beispielsweise auf Grundlage der Gliederung einer Textzeichenfolge ein Geometry-Objekt erstellen.
Textgliederung mit einem Pinsel für linearen Farbverlauf
Im folgenden Beispiel werden mehrere Möglichkeiten zum Erstellen interessanter visueller Effekte durch Ändern von Strichen, Füllung und Hervorhebung des konvertierten Texts veranschaulicht.
Beispiel für das Festlegen von verschiedenen Farben für Striche und Füllung
Beispiel für die Anwendung eines Bildpinsels auf den Strich
Beispiel für die Anwendung eines Bildpinsels auf den Strich und die Hervorhebung
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 Zeichenfolge nicht mehr ändern. Sie können jedoch die Darstellung des konvertierten Texts beeinflussen, indem Sie dessen Stricheigenschaften und Fülleigenschaften ändern. Der Strich bezieht sich auf die Kontur des konvertierten Texts und die Füllung auf den Bereich innerhalb der Kontur des konvertierten Texts. Weitere Informationen finden Sie unter Gewusst wie: 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 z. B. eine Animation auf das PathGeometry-Objekt anwenden, sodass die Animation der Kontur des formatierten Texts folgt.
Im folgenden Beispiel wird formatierter Text angezeigt, der in ein PathGeometry-Objekt konvertiert wurde. Eine animierte Ellipse folgt den Strichen des gerenderten Texts.
Sphäre, die der Pfadgeometrie des Texts folgt
Weitere Informationen finden Sie unter Gewusst wie: Erstellen einer PathGeometry-Animation für Text.
Sie können weitere interessante Verwendungsmöglichkeiten für formatierten Text erstellen, sobald dieser in ein PathGeometry-Objekt konvertiert wurde. So kann er z. B. für die Anzeige von Videos verwendet werden. Weitere Informationen finden Sie unter Videotextdemo.
Video, das in der Pfadgeometrie des Texts angezeigt wird
Win32-Migration
Die Features von FormattedText für das Zeichnen von Text ähneln den Features der Win32-DrawText-Funktion. Für Entwickler, die von der Win32-API migrieren, enthält die folgende Tabelle eine Auflistung der Win32-DrawText-Flags und die jeweilige Entsprechung in Windows Presentation Foundation (WPF).
DrawText-Flag |
WPF-Entsprechung |
Hinweise |
---|---|---|
DT_BOTTOM |
Verwenden Sie die Height-Eigenschaft, um eine entsprechende Win32-DrawText-'y'-Position zu berechnen. |
|
DT_CALCRECT |
Verwenden Sie die Height-Eigenschaft und die Width-Eigenschaft, um das Ausgaberechteck zu berechnen. |
|
DT_CENTER |
Verwenden Sie die TextAlignment-Eigenschaft, wobei der Wert auf Center festgelegt ist. |
|
DT_EDITCONTROL |
Keine |
Nicht erforderlich. Leerzeichenbreite und letztes Linienrendering entsprechen denen im Framework-Edit-Steuerelement. |
DT_END_ELLIPSIS |
Verwenden Sie die Trimming-Eigenschaft, wobei der Wert auf CharacterEllipsis festgelegt ist. Verwenden Sie WordEllipsis, um Win32 DT_END_ELLIPSIS mit DT_WORD_ELIPSIS-Endellipse zu erhalten. In diesem Fall tritt die Zeichenellipse nur auf Wörtern auf, die nicht in eine Zeile passen. |
|
DT_EXPAND_TABS |
Keine |
Nicht erforderlich. Registerkarten werden automatisch erweitert, sodass sie alle 4 em einen Haltepunkt aufweisen. Dies entspricht in etwa der Breite 8 sprachunabhängiger Zeichen. |
DT_EXTERNALLEADING |
Keine |
Nicht erforderlich. Der externe Abstand ist immer im Zeilenabstand enthalten. Verwenden Sie die LineHeight-Eigenschaft, um einen benutzerdefinierten Zeilenabstand zu erstellen. |
DT_HIDEPREFIX |
Keine |
Nicht unterstützt. Entfernen Sie vor dem Erstellen des FormattedText-Objekts das &-Zeichen aus der Zeichenfolge. |
DT_LEFT |
Dies ist die Standardtextausrichtung. Verwenden Sie die TextAlignment-Eigenschaft, wobei der Wert auf Left festgelegt ist. (nur WPF). |
|
DT_MODIFYSTRING |
Keine |
Nicht unterstützt. |
DT_NOCLIP |
Clipping geschieht nicht automatisch. Wenn Sie Text zurechtschneiden möchten, verwenden Sie die VisualClip-Eigenschaft. |
|
DT_NOFULLWIDTHCHARBREAK |
Keine |
Nicht unterstützt. |
DT_NOPREFIX |
Keine |
Nicht erforderlich. Das &-Zeichen in Zeichenfolgen wird immer als normales Zeichen behandelt. |
DT_PATHELLIPSIS |
Keine |
Verwenden Sie die Trimming-Eigenschaft, wobei der Wert auf WordEllipsis festgelegt ist. |
DT_PREFIX |
Keine |
Nicht unterstützt. Wenn Sie Unterstriche für Text verwenden möchten, beispielsweise eine Tastenkombination oder einen Link, verwenden Sie die SetTextDecorations-Methode. |
DT_PREFIXONLY |
Keine |
Nicht unterstützt. |
DT_RIGHT |
Verwenden Sie die TextAlignment-Eigenschaft, wobei der Wert auf Right festgelegt ist. (nur WPF). |
|
DT_RTLREADING |
Legen Sie die FlowDirection-Eigenschaft auf RightToLeft fest. |
|
DT_SINGLELINE |
Keine |
Nicht erforderlich. FormattedText-Objekte verhalten sich wie einzeilige Steuerelemente, es sei denn, die MaxTextWidth-Eigenschaft ist aktiviert oder der Text enthält einen Wagenrücklauf/Zeilenvorschub (CR/LF). |
DT_TABSTOP |
Keine |
Keine Unterstützung für benutzerdefinierte Tabstopppositionen. |
DT_TOP |
Nicht erforderlich. Obere Ausrichtung ist der Standard. Andere vertikale Positionierungswerte können definiert werden, indem die Height-Eigenschaft zur Berechnung einer entsprechenden Win32-DrawText-'y'-Position verwendet wird. |
|
DT_VCENTER |
Verwenden Sie die Height-Eigenschaft, um eine entsprechende Win32-DrawText-'y'-Position zu berechnen. |
|
DT_WORDBREAK |
Keine |
Nicht erforderlich. Die Worttrennung geschieht bei FormattedText-Objekten automatisch. Sie können sie nicht deaktivieren. |
DT_WORD_ELLIPSIS |
Verwenden Sie die Trimming-Eigenschaft, wobei der Wert auf WordEllipsis festgelegt ist. |
Siehe auch
Aufgaben
Gewusst wie: Erstellen von Text mit Kontur
Konzepte
Dokumente in Windows Presentation Foundation
Typografie in Windows Presentation Foundation
Gewusst wie: Erstellen einer PathGeometry-Animation für Text