WPF RichtextBox有一个滚动方法:
RichTextBox.ScrollToVerticalOffset(double)
我想以这样的方式滚动,一个cerctain范围或至少它的开始进入视野。如何以有意义的方式将TextPointer转换为double?
看看FrameworkElement.BringIntoView方法。我正在使用这样的东西:
public void Foo(FlowDocumentScrollViewer viewer) {
TextPointer t = viewer.Selection.Start;
FrameworkContentElement e = t.Parent as FrameworkContentElement;
if (e != null)
e.BringIntoView();
}
使用GetCharacterRect获取RichTextBox中TextPointer的位置:
Rect r = textPointer.GetCharacterRect(LogicalDirection.Backward);
rtb.ScrollToVerticalOffset(r.Y);
因此,如果您想知道为什么BringIntoView()
不工作或滚动到您的文本框的顶部,这可能是因为您试图“引入”包含您的整个可滚动文本内容的Inline
- 它“带来查看”这个内联,从(你猜对了)顶部的“开始”TextPosition
开始。
解决方案是每ScrollToVerticalOffset()
使用Miroslav's answer。