2

在带有以下文本的 WPF .NET 4.0 RichTextBox 中:

苹果

奶酪

橙子

我如何以编程方式使用 C#(而不是 XAML 标记)将所有以字符“C”开头的行加粗?

更一般地说,如何从 RichTextBox 中获取对给定文本行的引用,然后对其应用一些格式?

4

1 回答 1

3

嗯,这比我预期的要棘手,但我认为下面的代码可以做到:

        foreach (var paragraph in richTextBox1.Document.Blocks)
        {
            var text = new TextRange(paragraph.ContentStart,
                           paragraph.ContentEnd).Text;

            paragraph.FontWeight = text.StartsWith("C") ?
                           FontWeights.Bold : FontWeights.Normal;
        }

基本上,RichTextBox 将其内容保存在 FlowDocument 中(通过 Document 属性访问),而 FlowDocument 又具有包含每个段落的 Block 集合。实际上,Blocks 集合中的每个项目都可以是从抽象类 Block 派生的任何内容……但我假设如果您只向 RichTextBox 添加简单文本,那么它们将始终只是段落。请参阅此处以获得更好的解释!

最棘手的部分是,要将文本从段落中取出,您需要使用TextRange类……但好消息是,一旦我们有了文本,段落就具有用于设置字体粗细等的简单属性!

于 2011-09-01T21:02:13.010 回答