RichTextbox TextRange突出显示(位置)不正确

时间:2017-10-29 12:08:03

标签: c# wpf richtextbox

要在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();
        }

文本突出显示,但突出显示的位置不正确。这在下一个屏幕截图中可视化:

enter image description here

浅蓝色是选择,深蓝色是突出显示的文本。如您所见,深蓝色高光是2像素太高(在y轴上)。

您知道解决此问题的解决方案吗?

提前谢谢。

更新1:

浅蓝色背景是我用鼠标选择手动创建的背景。

0 个答案:

没有答案