要在RichtTextBox中查找搜索关键字,我实现了以下方法:
private TextRange SearchText(TextPointer position, string searchText)
{
while (position != null)
{
if (position.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
{
string textRun = position.GetTextInRun(LogicalDirection.Forward);
// Find the starting index of any substring that matches "searchText".
int indexInRun = textRun.IndexOf(searchText);
if (indexInRun >= 0)
{
TextPointer start = position.GetPositionAtOffset(indexInRun);
TextPointer end = start.GetPositionAtOffset(searchText.Length);
return new TextRange(start, end);
}
}
position = position.GetNextContextPosition(LogicalDirection.Forward);
}
return null;
}
要突出显示SearchText方法的结果TextRange,我使用以下代码(代码段):
textRange.ApplyPropertyValue(TextElement.BackgroundProperty, _blueHighlightBackgroundColor);
textRange.ApplyPropertyValue(TextElement.ForegroundProperty, SystemColors.WindowBrush);
textRange.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);
FrameworkContentElement frameworkContentElement = (rtbResultText.Selection.Start.Parent as FrameworkContentElement);
if (frameworkContentElement != null)
{
frameworkContentElement.BringIntoView();
}
文本突出显示,但突出显示的位置不正确。这在下一个屏幕截图中可视化:
浅蓝色是选择,深蓝色是突出显示的文本。如您所见,深蓝色高光是2像素太高(在y轴上)。
您知道解决此问题的解决方案吗?
提前谢谢。
更新1:
浅蓝色背景是我用鼠标选择手动创建的背景。