7

我想将 a 的内容移动到内容的RichTextBox特定行。RichTextBox提供ScrollToVerticalOffset从嵌入式的方法ScrollViewer。该方法在 MSDN 中有记载,但未指定名为 offset 的参数的测量单位。类型是double

a 的VerticalOffset属性TextBox记录为与设备无关的单位(每单位 1/96 英寸)。

所以我试图从字体大小计算偏移量。字体大小以像素为单位。结果公式是

offset = fontSize * 96 / 72  *  lineNumber;

但这远远落后于所需的线。现在我正在使用这个计算:

offset = fontSize * lineNumber;

它是否正确?

4

2 回答 2

2

确实从问这个问题很久了,但仍然没有找到正确的答案!

我现在使用了这段代码,这对我来说真的很好:

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

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

于 2015-05-02T16:56:53.777 回答
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();
    }
}

于 2018-04-23T07:54:47.873 回答