WPF 中的 RichTextBox
是一个功能强大的控件,可以显示和编辑格式化的文本内容。与 TextBox
和 TextBlock
不同,RichTextBox
支持富文本格式(如粗体、斜体、下划线、超链接等),并且能够处理多种不同的字体、颜色和段落布局。
1. 基本使用
RichTextBox
的基本用法与其他文本控件类似,可以直接在 XAML 中定义:
<RichTextBox Width="300" Height="200" />
RichTextBox
默认使用 WPF 的 FlowDocument
来存储和显示内容。你可以直接向其中插入文本段落:
<RichTextBox>
<FlowDocument>
<Paragraph>
This is a basic example of RichTextBox.
</Paragraph>
</FlowDocument>
</RichTextBox>
2. 设置富文本
RichTextBox
支持多种文本格式化选项,如字体、大小、颜色、加粗、斜体、下划线等。可以在 FlowDocument
中使用多种内嵌格式化标签:
<RichTextBox>
<FlowDocument>
<Paragraph>
<Run Text="Normal text " />
<Bold>Bold text</Bold>
<Run Text=" and " />
<Italic>Italic text</Italic>
</Paragraph>
<Paragraph>
<Underline>Underlined text</Underline>
</Paragraph>
<Paragraph>
<Run Foreground="Blue">Colored text</Run>
</Paragraph>
</FlowDocument>
</RichTextBox>
3. 文本对齐和段落布局
RichTextBox
支持段落的对齐、缩进和其他布局格式,可以通过 Paragraph
元素的属性来控制段落的外观。
<RichTextBox>
<FlowDocument>
<Paragraph TextAlignment="Center">
Centered Text
</Paragraph>
<Paragraph TextAlignment="Right">
Right-aligned Text
</Paragraph>
<Paragraph TextIndent="30">
Indented Text
</Paragraph>
</FlowDocument>
</RichTextBox>
4. 在代码中操作 RichTextBox
你可以通过 C# 代码直接操作 RichTextBox
的内容。例如,可以使用 Document
属性来操作 FlowDocument
,并动态添加段落或格式化内容。
RichTextBox myRichTextBox = new RichTextBox();
Paragraph paragraph = new Paragraph();
Run run = new Run("This is dynamically added text.");
run.FontWeight = FontWeights.Bold;
paragraph.Inlines.Add(run);
myRichTextBox.Document.Blocks.Add(paragraph);
5. 获取和设置文本内容
RichTextBox
通过 Document
属性来管理其内容。要从 RichTextBox
中获取纯文本,可以使用 TextRange
类:
TextRange textRange = new TextRange(myRichTextBox.Document.ContentStart, myRichTextBox.Document.ContentEnd);
string plainText = textRange.Text;
要将文本插入到 RichTextBox
中,可以通过设置 TextRange
的 Text
属性:
TextRange textRange = new TextRange(myRichTextBox.Document.ContentStart, myRichTextBox.Document.ContentEnd);
textRange.Text = "This is new text.";
6. 富文本格式化操作
通过 TextRange
也可以执行富文本操作,例如设置字体、颜色、加粗等样式:
TextRange textRange = new TextRange(myRichTextBox.Selection.Start, myRichTextBox.Selection.End);
textRange.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);
textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);
7. 加载和保存文档
RichTextBox
支持加载和保存多种文档格式,如 RTF(富文本格式)和 XAML 格式。以下是加载和保存 RTF 文档的示例:
保存 RTF 文档:
using (FileStream fs = File.Create("document.rtf"))
{
TextRange textRange = new TextRange(myRichTextBox.Document.ContentStart, myRichTextBox.Document.ContentEnd);
textRange.Save(fs, DataFormats.Rtf);
}
加载 RTF 文档:
using (FileStream fs = File.OpenRead("document.rtf"))
{
TextRange textRange = new TextRange(myRichTextBox.Document.ContentStart, myRichTextBox.Document.ContentEnd);
textRange.Load(fs, DataFormats.Rtf);
}
8. 处理超链接
RichTextBox
可以通过 Hyperlink
元素支持超链接功能:
<RichTextBox>
<FlowDocument>
<Paragraph>
Please visit <Hyperlink NavigateUri="http://www.example.com">our website</Hyperlink>.
</Paragraph>
</FlowDocument>
</RichTextBox>
在代码中处理点击事件时,可以通过 RequestNavigate
事件实现:
void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
e.Handled = true;
}
9. 锁定 RichTextBox
为只读模式
如果你希望用户无法编辑文本,可以设置 IsReadOnly
属性:
<RichTextBox IsReadOnly="True">
<FlowDocument>
<Paragraph>
This is read-only text.
</Paragraph>
</FlowDocument>
</RichTextBox>
10. 快捷键支持和文本编辑功能
RichTextBox
默认支持常见的富文本编辑快捷键,比如:
- Ctrl+B: 加粗
- Ctrl+I: 斜体
- Ctrl+U: 下划线
你可以通过自定义 CommandBindings
来扩展这些功能。
小结
RichTextBox
是 WPF 中强大的文本编辑控件,支持富文本格式、超链接、多段落布局等功能。你可以使用 FlowDocument
来构建其内容,并通过代码或 XAML 进行灵活操作。配合加载和保存文档、文本格式化和快捷键功能,RichTextBox
可以满足大多数的文本编辑需求。