Как рассчитать VerticalOffset, в котором индекс будет вертикально центрирован в области просмотра текстового поля? - PullRequest
2 голосов
/ 15 августа 2010

Я работаю над добавлением функций поиска и замены в создаваемый текстовый редактор, и мне хотелось бы иметь возможность прокручивать текстовое поле так, чтобы выбранное совпадение было центрировано по центру экрана.

1 Ответ

4 голосов
/ 15 августа 2010

Вы можете использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...