Вы можете использовать GetRectFromCharacterIndex для преобразования из индекса символа в прямоугольник на экране. Это будет учитывать прокрутку, поэтому вам нужно добавить текущий VerticalOffset:
var start = textBox.GetRectFromCharacterIndex(textBox.SelectionStart);
var end = textBox.GetRectFromCharacterIndex(textBox.SelectionStart + textBox.SelectionLength);
textBox.ScrollToVerticalOffset((start.Top + end.Bottom - textBox.ViewportHeight) / 2 + textBox.VerticalOffset);
Если у вас есть RichTextBox, вы должны использовать TextPointer.GetCharacterRect :
var start = textBox.Selection.Start.GetCharacterRect(LogicalDirection.Forward);
var end = textBox.Selection.End.GetCharacterRect(LogicalDirection.Forward);
textBox.ScrollToVerticalOffset((start.Top + end.Bottom - textBox.ViewportHeight) / 2 + textBox.VerticalOffset);