B_old
B_old

Reputation: 1291

WPF RichTextBox scroll to TextPointer

The WPF RichtTextBox has a method to scroll:

RichTextBox.ScrollToVerticalOffset(double)

I want to scroll in such a way, that a certain range or at least the start of it comes into view. How can I convert a TextPointer to double in a meaningful way?

Upvotes: 9

Views: 5319

Answers (3)

psurikov
psurikov

Reputation: 3458

I'm somewhat late, but here is a more complete answer. The current scroll offsets need to be combined with the character position. Here is an example that scrolls RichTextBox text pointer to the center of the view:

var characterRect = textPointer.GetCharacterRect(LogicalDirection.Forward);
RichTextBox.ScrollToHorizontalOffset(RichTextBox.HorizontalOffset + characterRect.Left - RichTextBox.ActualWidth / 2d);
RichTextBox.ScrollToVerticalOffset(RichTextBox.VerticalOffset + characterRect.Top - RichTextBox.ActualHeight / 2d);

You don't need to check for negative numbers, as the scrolling accounts for this.

Upvotes: 4

Miroslav Hrivik
Miroslav Hrivik

Reputation: 892

Use GetCharacterRect to get position of TextPointer in RichTextBox:

Rect r = textPointer.GetCharacterRect(LogicalDirection.Backward);
rtb.ScrollToVerticalOffset(r.Y);

Upvotes: 4

Zak
Zak

Reputation: 734

Have a look at the FrameworkElement.BringIntoView Method. I'm using something like this:

public void Foo(FlowDocumentScrollViewer viewer) {
    TextPointer t = viewer.Selection.Start;
    FrameworkContentElement e = t.Parent as FrameworkContentElement;
    if (e != null)
         e.BringIntoView();
}

Upvotes: 10

Related Questions