RTF 块

RTF 块为高级文本布局提供了多种功能,当需要支持段落、内联 UI 元素或复杂文本布局时,可以使用这些功能。

这是正确的控件吗?

如果需要支持多个段落、多列或其他复杂文本布局,或者图像等内联 UI 元素,请使用 RichTextBlock

使用 TextBlock 在应用中显示大多数只读文本。 可以使用它来显示单行或多行文本、内联超链接和带有加粗、斜体或带下划线格式的文本。 TextBlock 提供较简单的内容模型,因此通常也更易于使用,并且它比 RichTextBlock 提供文本呈现性能更好。 它最适合大多数应用 UI 文本。 虽然可以在文本中放入换行符,但 TextBlock 旨在显示一个段落且不支持文本缩进。

有关选择正确的文本控件的详细信息,请参阅文本控件文章。

建议

请参阅字体版式和字体指南。

UWP 和 WinUI 2

重要

本文中的信息和示例是针对使用 Windows App SDKWinUI 3 的应用优化的,但通常适用于使用 WinUI 2 的 UWP 应用。 有关特定于平台的信息和示例,请查看 UWP API 参考。

本部分包含在 UWP 或 WinUI 2 应用中使用该控件所需的信息。

此控件的 API 存在于 Windows.UI.Xaml.Controls 命名空间中。

建议使用最新的 WinUI 2 来获取所有控件的最新样式和模板。 WinUI 2.2 或更高版本包含此控件的使用圆角的新模板。 有关详细信息,请参阅圆角半径

创建 RTF 块

WinUI 3 库应用包括大多数 WinUI 3 控件、特性和功能的交互式示例。 通过 Microsoft Store 获取应用,或在 GitHub 上获取源代码

RichTextBlock 的内容属性是 Blocks 属性,该属性通过 Paragraph 元素支持基于段落的文本。 它没有可用于在应用中轻松访问控件的文本内容的文本属性。 但是,RichTextBlock 提供了多个 TextBlock 没有提供的独特功能。

RichTextBlock 支持:

段落

使用 Paragraph 元素定义要在 RichTextBlock 控件中显示的文本块。 每个 RichTextBlock 都应至少包含一个 Paragraph。

可以通过设置 RichTextBlock.TextIndent 属性来设置 RichTextBlock 中的所有段落的缩进量。 可以通过将 Paragraph.TextIndent 属性设置为其他值来替代 RichTextBlock 中特定段落的此设置。

<RichTextBlock TextIndent="12">
  <Paragraph TextIndent="24">First paragraph.</Paragraph>
  <Paragraph>Second paragraph.</Paragraph>
  <Paragraph>Third paragraph. <Bold>With an inline.</Bold></Paragraph>
</RichTextBlock>

内联 UI 元素

InlineUIContainer 类允许嵌入任何 UIElement 与文本。 常见方案是将图像嵌入文本,但也可以使用交互式元素(如 Button 或 CheckBox)。

如果要在同一位置嵌入多个元素,请考虑将面板用作单个 InlineUIContainer 子元素,然后将多个元素放置在该面板中。

此示例演示如何使用 InlineUIContainer 将图像插入 RichTextBlock。

<RichTextBlock>
    <Paragraph>
        <Italic>This is an inline image.</Italic>
        <InlineUIContainer>
            <Image Source="Assets/Square44x44Logo.png" Height="30" Width="30"/>
        </InlineUIContainer>
        Mauris auctor tincidunt auctor.
    </Paragraph>
</RichTextBlock>

溢出容器

可以将 RichTextBlock 与 RichTextBlockOverflow 元素配合使用来创建多列或其他高级页面布局。 RichTextBlockOverflow 元素的内容始终来自 RichTextBlock 元素。 通过将 RichTextBlock 或其他 RichTextBlockOverflow 的 OverflowContentTarget 设置为 RichTextBlockOverflow 来链接 RichTextBlockOverflow 元素。

下面是创建两列布局的简单示例。 有关更复杂的示例,请参阅“示例”部分。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <RichTextBlock Grid.Column="0" 
                   OverflowContentTarget="{Binding ElementName=overflowContainer}" >
        <Paragraph>
            Proin ac metus at quam luctus ultricies.
        </Paragraph>
    </RichTextBlock>
    <RichTextBlockOverflow x:Name="overflowContainer" Grid.Column="1"/>
</Grid>

设置文本格式

尽管 RichTextBlock 存储纯文本,但你可以应用各种格式设置选项来自定义文本在应用中的呈现方式。 可以设置标准控件属性,如 FontFamily、FontSize、FontStyle、Foreground 和 CharacterSpacing 以更改文本的外观。 还可以使用内联文本元素和版式附加属性设置文本的格式。 这些选项仅影响 RichTextBlock 在本地显示文本的方式,因此,如果将文本复制并粘贴到 RTF 控件中,例如,不会应用任何格式设置。

内联元素

Microsoft.UI.Xaml.Documents 命名空间提供了各种内联文本元素,可用于设置文本的格式,例如 Bold、Italic、Run、Span 和 LineBreak。 对文本部分应用格式的典型方法是将文本放置在 Run 或 Span 元素中,然后在该元素上设置属性。

下面是一个段落,第一个短语以粗体、蓝色、16pt 文本显示。

<Paragraph>
    <Bold><Span Foreground="DarkSlateBlue" FontSize="16">Lorem ipsum dolor sit amet</Span></Bold>
    , consectetur adipiscing elit.
</Paragraph>

版式

Typography 类的附加属性提供对一组Microsoft OpenType 版式属性的访问权限。 可以在 RichTextBlock 或单个内联文本元素上设置这些附加属性,如下所示。

<RichTextBlock Typography.StylisticSet4="True">
    <Paragraph>
        <Span Typography.Capitals="SmallCaps">Lorem ipsum dolor sit amet</Span>
        , consectetur adipiscing elit.
    </Paragraph>
</RichTextBlock>

获取示例代码

文本控件

面向设计人员

面向开发人员 (XAML)

面向开发人员(其他)