<RichTextBlock IsTextSelectionEnabled="True" TextWrapping="Wrap" Width="200" >
<Paragraph>
This is some sample text to show the wrapping behavior.
</Paragraph>
</RichTextBlock>

// Create a RichTextBlock, a Paragraph and a Run.
RichTextBlock richTextBlock = new RichTextBlock();
Paragraph paragraph = new Paragraph();
Run run = new Run();
// Customize some properties on the RichTextBlock.
richTextBlock.IsTextSelectionEnabled = true;
richTextBlock.TextWrapping = TextWrapping.Wrap;
run.Text = "This is some sample text to show the wrapping behavior.";
richTextBlock.Width = 200;
// Add the Run to the Paragraph, the Paragraph to the RichTextBlock.
paragraph.Inlines.Add(run);
richTextBlock.Blocks.Add(paragraph);
// Add the RichTextBlock to the visual tree (assumes stackPanel is decalred in XAML).
stackPanel.Children.Add(richTextBlock);

// Create a RichTextBlock, a Paragraph and a Run.
RichTextBlock richTextBlock = new RichTextBlock();
Paragraph paragraph = new Paragraph();
Run run = new Run();
// Customize some properties on the RichTextBlock.
richTextBlock.IsTextSelectionEnabled = true;
richTextBlock.SelectionHighlightColor = new SolidColorBrush(Windows.UI.Colors.Pink);
richTextBlock.Foreground = new SolidColorBrush(Windows.UI.Colors.Blue);
richTextBlock.FontWeight = Windows.UI.Text.FontWeights.Light;
richTextBlock.FontFamily = new FontFamily("Arial");
richTextBlock.FontStyle = Windows.UI.Text.FontStyle.Italic;
run.Text = "This is some sample text to demonstrate some properties.";
//Add the Run to the Paragraph, the Paragraph to the RichTextBlock.
paragraph.Inlines.Add(run);
richTextBlock.Blocks.Add(paragraph);
// Add the RichTextBlock to the visual tree (assumes stackPanel is decalred in XAML).
stackPanel.Children.Add(richTextBlock);

Remarks

The RichTextBlock control displays read-only text, and provides several features for advanced text layout. Use a RichTextBlock when you need support for paragraphs, inline UI elements, or overflow text.

TextBlock provides a simpler content model, so it’s typically easier to use, and it can provide better text rendering performance than RichTextBlock. It also provides many of the same formatting options for customizing how your text is rendered. However, RichTextBlock provides several unique features that TextBlock doesn’t provide.

Paragraphs and formatting

You can use text elements and the attached properties of the Typography class to apply character and paragraph formatting to the text in the RichTextBlock. For example, you can apply Bold, Italic, and Underline to any portion of the text in the control.

Font fallback

The default FontFamily for RichTextBlock is Segoe UI and the default FontSize is 15 device-independent pixel (DIP). By default, RichTextBlock utilizes a font fallback mechanism to show glyphs that are not included in the specified font. If the glyph that is needed in a RichTextBlock is not available in the specified font, the font fallback mechanism goes through a list of fonts on the system to try and display the required characters in a different font.

The uniform spacing between characters, in units of 1/1000 of an em. The default is 0. Positive values increase tracking and loosen character spacing. Negative values decrease tracking and tighten the character spacing.

Examples

Remarks

Tracking is the typographic term for an amount of space added or removed between all pairs of characters in a portion of text. This feature can be accessed through the CharacterSpacing property on TextBlock and RichTextBlock. CharacterSpacing is measured in 1/1000 of an "em". One "em" is equivalent to the current font size of the control. For example, an additional 14 pixels will be inserted between each character in a text control with FontSize="14" and CharacterSpacing="1000".

ClipPropertyClipPropertyClipPropertyClipProperty

CompositeModeCompositeModeCompositeModeCompositeMode

Gets or sets a property that declares alternate composition and blending modes for the element in its parent layout and window. This is relevant for elements that are involved in a mixed XAML / Microsoft DirectX UI.

FlowDirectionFlowDirectionFlowDirectionFlowDirection

Gets or sets the direction in which text and other UI elements flow within any parent element that controls their layout. This property can be set to either LeftToRight or RightToLeft. Setting FlowDirection to RightToLeft on any element sets the alignment to the right, the reading order to right-to-left and the layout of the control to flow from right to left.

A FontFamily object that specifies the preferred font family, or a primary preferred font family with one or more fallback font families. For information about defaults, see the FontFamily class topic.

The brush used to apply to the text contents. The default is a null brush from a pure code perspective, but the default text styles set this to Black (for Light theme) or White (for Dark theme) for a TextBlock element in UI.

The default appearance of text and text styles depends heavily on the active theme and other settings. The theme and various styles and behaviors that are using default system settings or user preferences are the source of the effective runtime appearance of RichTextBlock foreground color of text as well as other text characteristics. You can change these defaults by changing the property values, or by applying a different style to specific RichTextBlock instances. You can change the foreground value for all default text by overriding the resource named DefaultTextForegroundThemeBrush in App.xaml.

true if color glyphs show in color; otherwise, false. The default is true.

Remarks

Windows 8.1 introduces the ability for fonts to include multiple colored layers for each glyph. For example, the Segoe UI Emoji font defines color versions of the Emoticon and other Emoji characters. By default, the IsColorFontEnabled property is true and fonts with these additional layers are rendered in color.

In Windows 8, Extensible Application Markup Language (XAML) text controls don't render multi-color fonts in color. When an app that was compiled for Windows 8 is recompiled for Windows 8.1, color rendering of multi-color fonts is enabled by default. Some glyphs in multi-color fonts have different layout metrics when rendered in color. This could cause different layout in apps when they are recompiled for Windows 8.1. To retain the Windows 8 behavior when your app is recompiled for Windows 8.1, set IsColorFontEnabled to false.

The maximum lines of text shown in the RichTextBlock. The default is 0, which is a special value that represents "Auto" behavior. The value cannot be negative.

Remarks

Use the MaxLines property to specify the maximum lines of text shown in a text block. The text control will adjust it’s height to show no more than the specified number of lines, regardless of the font size, font style, or text length.

Negative integer values are invalid, and will cause a run-time exception.

A value of the enumeration that indicates how the font is modified to align at different sizes. The default is None.

Remarks

When OpticalMarginAlignment is set to TrimSideBearings, the text is trimmed to the leftmost stroke of the first character and the rightmost stroke of the last character on a line. For example, an "L" has a small amount of space to the left of the vertical stroke, which scales with font size. When TrimSideBearings is set, the left of the vertical stroke is directly aligned without the spacing. This enables easier alignment to the Windows grid system as explained in Laying out an app page.

The brush used to highlight the selected text. The default is a null brush from a pure code perspective, but the default text styles for RichTextBlock content apply a theme resource brush for this in a runtime instance of a RichTextBlock control.

Remarks

A default text style sets the default selection highlight color to the system resource TextSelectionHighlightColorThemeBrush. To change the selection highlight color for all editable text controls in your app, you can override the TextSelectionHighlightColorThemeBrush system resource in App.xaml. This will affect PasswordBox, TextBox, and RichEditBox controls as well as RichTextBlock content. For more info, see XAML theme resources.

Examples

This example shows how to apply text decorations to text in a RichTextBlock, both at the control level and at the TextElement level.

<RichTextBlock TextDecorations="Underline"
Loaded="RichTextBlock_Loaded">
<Paragraph>This text has an underline.</Paragraph>
<Paragraph TextDecorations="Strikethrough">
This text has a strikethrough, but no underline.
</Paragraph>
<Paragraph TextDecorations="Strikethrough, Underline">This text has it all!</Paragraph>
<Paragraph x:Name="Paragraph4">This text is decorated in code.</Paragraph>
</RichTextBlock>

A value that indicates how the reading order is determined for the RichTextBlock. The default is DetectFromContent.

Remarks

This property can be useful when the base direction of the text is unknown, and may not match the user's language or direction. For more info, see the Remarks section of the TextReadingOrder enumeration or How to support bidirectional UI.

Note

In Windows 8.1, the default value is 0, Default. Starting with Windows 10, the enumeration value 0 has the constant name UseFlowDirection, and is not the default value.

Methods

Adds a routed event handler for a specified routed event, adding the handler to the handler collection on the current element. Specify handledEventsToo as true to have the provided handler be invoked even if the event is handled elsewhere.

Arrange(Rect)Arrange(Rect)Arrange(Rect)Arrange(Rect)

Positions child objects and determines a size for a UIElement. Parent objects that implement custom layout for their child elements should call this method from their layout override implementations to form a recursive layout update.

InvalidateMeasureInvalidateMeasureInvalidateMeasureInvalidateMeasure

Measure(Size)Measure(Size)Measure(Size)Measure(Size)

Updates the DesiredSize of a UIElement. Typically, objects that implement custom layout for their layout children call this method from their own MeasureOverride implementations to form a recursive layout update.

OnApplyTemplateOnApplyTemplateOnApplyTemplateOnApplyTemplate

Invoked whenever application code or internal processes (such as a rebuilding layout pass) call ApplyTemplate. In simplest terms, this means the method is called just before a UI element displays in your app. Override this method to influence the default post-template logic of a class.

PointerPressedPointerPressedPointerPressedPointerPressed

PointerReleasedPointerReleasedPointerReleasedPointerReleased

Occurs when the pointer device that previously initiated a Press action is released, while within this element. Note that the end of a Press action is not guaranteed to fire a PointerReleased event; other events may fire instead. For more info, see Remarks.