Как установить положение прокрутки RichTextBox за кодом в WPF для каждого абзаца? - PullRequest
0 голосов
/ 02 ноября 2019

У меня полноформатное текстовое поле и длинный текст с несколькими абзацами. Я хочу написать за кодами, чтобы отрегулировать вертикальное положение полосы прокрутки, чтобы сосредоточиться на конкретном абзаце. Можно ли рассчитать вертикальное смещение на основе размера расширенного текстового поля и положения абзаца?

RichTextBox.ScrollToVerticalOffset(calculatedData)

1 Ответ

1 голос
/ 02 ноября 2019

Для того, чтобы получить позицию, сначала вы должны получить позицию каретки в начале абзаца. Затем вы получите прямоугольник ограничительной рамки. Свойство Y прямоугольника может прокручивать абзац в первом из RichTextBox.

        private void RichTextBox_OnLoaded(object sender, RoutedEventArgs e)
        {
            // Get the paragraph block text
            var textBlock = RichTextBox.Document.Blocks.ElementAt(2);
            //get the caret position of the start of the paragraph
            var startOfTextBlock = textBlock.ContentStart;
            // get the the character rectangle
            Rect charRect = startOfTextBlock.GetCharacterRect(LogicalDirection.Forward);
            // set the the vertical offset ot the Y position of the rectangle 
            RichTextBox.ScrollToVerticalOffset(charRect.Y);
        }
...