2

我正在将格式应用于 WPF RichTextBox 中的选定标记。为此,我得到一个包含我想突出显示的标记的 TextRange。然后,我将像这样更改文本的颜色:

// Get start and end pointer for token
TextPointer startPointer = run.ContentStart.GetPositionAtOffset(startOffset);
TextPointer endPointer = run.ContentStart.GetPositionAtOffset(endOffset);

// Get text range for token
TextRange textRange = new TextRange(startPointer, endPointer);

// Highlight token
textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue);

这发生在我的 RichTextBox 的 TextChanged 事件上。

格式将按预期应用,但继续键入文本将导致新文本继承已应用于相邻单词的格式。我希望任何新文本的格式都使用 RichTextBox 属性中定义的默认格式选项。这可能吗?

或者,我可以使用默认格式选项突出显示我不希望为蓝色的所有标记,但这对我来说感觉很尴尬。

4

1 回答 1

3

这不是标准行为吗?如果我在 Word 中突出显示文本,使其变为粗体,将光标移到该文本旁边并键入,新文本也会变为粗体。我想 MS 使富文本框的工作方式类似于 Word 中的文本区域。

如果您根据匹配某些条件(例如语法突出显示)选择标记,您可以尝试在光标距离标记 1 个字符后将样式应用于文本吗?例如:

一些令牌 |

代替

一些令牌|

|光标在哪里。在第一个示例中,光标与标记用空格隔开,因此如果您的程序找到SomeToken它,它将获取从之前S(空格)之前的文本范围。我想该样式不会应用于新输入的文本。

我承认这只是一个猜测,我可能从你的问题描述中误解了你的确切情况。更多代码可能会有所帮助,尤其是TextChanged您提到的事件或创建文本范围的代码。

于 2010-04-05T11:21:34.203 回答