在WPF RichTextBox中,根据行号计算ScrollToVerticalOffset的偏移量

7
我想将 RichTextBox 的内容移动到特定行。该控件提供了来自嵌入式 ScrollViewerScrollToVerticalOffset 方法。该方法在 MSDN 中有文档,但参数名为 offset 的度量单位未指定。类型为 doubleTextBoxVerticalOffset 属性以设备独立单位记录(每单位为 1/96 英寸)。
因此,我尝试根据字体大小计算偏移量。字体大小以像素为单位给出。得到的公式是:
offset = fontSize * 96 / 72  *  lineNumber;

但是这跳过了所需的行。目前我正在使用以下计算:
offset = fontSize * lineNumber;

这是否正确?

2个回答

2

虽然提出这个问题已经过了很长时间,但我仍然没有找到正确的答案!!

现在我使用的这段代码对我来说非常好:

var offset = (lineNumber * (fontSize + 2)) - richTextBox.ActualHeight / 2;
richTextBox.ScrollToVerticalOffset(offset);

如果您知道比这种方法更好的解决方案,请帮助我。

你的计算听起来不错。但是我现在无法验证这个计算。 - Christian

2

TextPointer myTextPointer1 = Paragraph.ContentStart.GetPositionAtOffset(20);
TextPointer myTextPointer2 = Paragraph.ContentEnd.GetPositionAtOffset(-10);

RichTextBox.Selection.Select(myTextPointer1, myTextPointer2);
           
DependencyObject currObj = RichTextBox.CaretPosition.Parent;
FrameworkElement fe = currObj as FrameworkElement;
if (fe != null)
{
    fe.BringIntoView();
}
else
{
    FrameworkContentElement fce = currObj as FrameworkContentElement;
    if (fce != null)
    {
        fce.BringIntoView();
    }
}


1
虽然这段代码可能回答了问题,但提供关于为什么和/或如何回答问题的额外上下文可以提高其长期价值。 - Nicholas Sizer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接