我正在将格式应用于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属性中定义的默认格式选项。这可能吗?
或者我可以使用默认格式选项突出显示我不希望变成蓝色的所有标记,但这对我来说感觉很尴尬。
答案 0 :(得分:3)
这不是标准行为吗?如果我在Word中突出显示文本,将其设置为粗体,将光标移动到该文本旁边并键入,新文本也会变为粗体。我想,MS使富文本框的工作方式与Word中的文本区域类似。
如果您选择基于匹配某些条件的令牌(例如语法高亮显示),您是否可以尝试将该样式应用于 之后的文本光标距离令牌1个字符?例如:
SomeToken |
而不是
SomeToken |
其中|
是光标。在第一个示例中,光标与标记之间的空格分隔,因此如果您的程序找到SomeToken
,它将获得从S
之前到之前的文本范围(空格) )。我想这个样式不会应用于新输入的文本。
我承认这只是一个猜测,我可能会从你的问题描述中误解你的确切情况。更多代码可能会有所帮助,尤其是您提到的TextChanged
事件或创建文本范围的代码。