public static void HighlightText(RichTextBox richTextBox,int startPoint,int endPoint, Color color)
{
//Trying to highlight charactars here
}
起点是应该突出显示的第一个字符,终点是最后一个突出显示的字符。
一段时间以来,我一直在网上寻找安静的地方,但是我仍然不知道如何解决我的问题。 我希望你们中的任何一个都知道如何解决这个问题。
答案 0 :(得分:0)
这是一般想法:
public static void HighlightText(RichTextBox richTextBox, int startPoint, int endPoint, Color color)
{
//Trying to highlight charactars here
TextPointer pointer = richTextBox.Document.ContentStart;
TextRange range = new TextRange(pointer.GetPositionAtOffset(startPoint), pointer.GetPositionAtOffset(endPoint));
range.ApplyPropertyValue(TextElement.BackgroundProperty, new SolidColorBrush(color));
}
但是,由于偏移索引号与字符数不匹配,您将需要遍历文档以获得正确的文本位置。有些字符可能代表多个偏移位置。
这是执行此操作的方法。我不知道一种不循环浏览整个文档的方法。
public static void HighlightText(RichTextBox richTextBox, int startPoint, int endPoint, Color color)
{
//Trying to highlight charactars here
TextPointer pointer = richTextBox.Document.ContentStart;
TextPointer start = null, end = null;
int count = 0;
while (pointer != null)
{
if (pointer.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
{
if (count == startPoint) start = pointer.GetInsertionPosition(LogicalDirection.Forward);
if (count == endPoint) end = pointer.GetInsertionPosition(LogicalDirection.Forward);
count++;
}
pointer = pointer.GetNextInsertionPosition(LogicalDirection.Forward);
}
if (start == null) start = richTextBox.Document.ContentEnd;
if (end == null) end = richTextBox.Document.ContentEnd;
TextRange range = new TextRange(start, end);
range.ApplyPropertyValue(TextElement.BackgroundProperty, new SolidColorBrush(color));
}