Windows apps
Collapse the table of content
Expand the table of content
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

TextFormatter Class

Provides services for formatting text and breaking text lines using a custom text layout client.

Namespace: System.Windows.Media.TextFormatting
Assembly: PresentationCore (in presentationcore.dll)
XML Namespace:

public abstract class TextFormatter : IDisposable
public abstract class TextFormatter implements IDisposable
public abstract class TextFormatter implements IDisposable
This class is abstract; see Inheritance Hierarchy for derived non-abstract classes usable in XAML.

TextFormatter is the WPF text engine that provides services for formatting text and breaking text lines. TextFormatter can handle different text character formats and paragraph styles, and includes support for international text layout.

Unlike a traditional text API, the TextFormatter interacts with a text layout client through a set of callback methods. It requires the client to provide these methods in an implementation of the TextSource class. The following diagram illustrates the interaction of the text formatter client and the text layout client.

Interaction between the text layout client and the TextFormatter object

Diagram of text layout client and TextFormatter

Text Formatting Services

TextFormatter provides support for text features, such as OpenType typography, as well as support for text run, line, and paragraph level features.

The following table is a list of the key TextFormatter supported services for text features.



Background brush

The Brush that is used for the background color. See the BackgroundBrush property.

Baseline alignment

Determines the baseline distance of the line. See the BaselineAlignment property.

Font linking

Provides font linking through the use of composite fonts.

Foreground brush

The Brush that is used for the foreground color. See the ForegroundBrush property.


Advanced OpenType typographic features, such contextual alternates and standard ligatures. See the TextRunTypographyProperties class properties.


Determines the typeface, as well as, weight, style, and stretch. See the Typeface property.

Text decoration

Provides support for TextDecoration objects, such as underline or strikethrough. See the TextDecorations property.

Text effects

Provides support for TextEffect objects. See the TextEffects property.

The following table is a list of the key TextFormatter supported services for paragraph-level features.



Flow direction

Flow direction of the paragraph—left-to-right, or right-to-left. See the FlowDirection property.

Line indentation

Indentation for each line in the paragraph. See the Indent property.


Marker characteristics of the first line in the paragraph. See the TextMarkerProperties property.

Paragraph indentation

Indentation for the first line in the paragraph. See the ParagraphIndent property.


Includes support for tab alignment and tab leader.


Determine minimum and maximum paragraph width. See the FormatMinMaxParagraphWidth methods.

Word wrap

Determine how text wraps when it reaches the flow edge. See the TextWrapping property.

The following table is a list of the key TextFormatter supported services for line-level features.




Text alignment—left, right, centered, or justified. See the TextAlignment property.

Line height

Height of the line. See the Height property.

Line collapsing

Line collapsing support. See the Collapse method.

Black box measurement

Represents the metrics used to lay out a character in a device font. See the CharacterMetrics class.

Caret support

Caret navigation and editing support. See the TextLine character hit properties, such as GetNextCaretCharacterHit and GetPreviousCaretCharacterHit.

The following table is a list of the key TextFormatter supported services for text run-level features.



Hidden run

Range of characters that are not visible. See the TextHidden object.


Line and paragraph breaking.

The following example shows how to use a TextFormatter object to generate formatted lines of text that can be displayed as drawing objects.

// Create a TextFormatter object.
TextFormatter formatter = TextFormatter.Create();

// Create common paragraph property settings.
CustomTextParagraphProperties customTextParagraphProperties
    = new CustomTextParagraphProperties();

// Format each line of text from the text store and draw it.
while (textStorePosition < customTextSource.Text.Length)
    // Create a textline from the text store using the TextFormatter object.
    using (TextLine myTextLine = formatter.FormatLine(
        96 * 6,
        // Draw the formatted text into the drawing context.
        myTextLine.Draw(drawingContext, linePosition, InvertAxes.None);

        // Update the index position in the text store.
        textStorePosition += myTextLine.Length;

        // Update the line position coordinate for the displayed line.
        linePosition.Y += myTextLine.Height;


Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0

Community Additions

© 2018 Microsoft