сегодня я ищу способ прокрутки многострочного текстового поля с динамическим размером.
Я хочу прокрутить до курсора и не нахожу никакой полезной информации в inte rnet.
Попробовав много вещей, я знаю, как прокручивать до конца строки, но не как прокручивать до каретки. Прокрутка к правой строке уже реализована, но часть горизонтальной прокрутки уже отсутствует.
private void txtText_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Down || e.Key == Key.Up)
{
var CurrentLineIndex = txtText.GetLineIndexFromCharacterIndex(((TextBox)sender).SelectionStart);
txtText.ScrollToLine(CurrentLineIndex);
}
}
Это мой текущий код, который для меня выполняет прокрутку до правой строки.
Пытался сделать что-то похожее для горизонтальной прокрутки:
var rect = ((TextBox)sender).GetRectFromCharacterIndex(((TextBox)sender).CaretIndex);
txtText.ScrollToHorizontalOffset(Math.Max((txtText.HorizontalOffset + rect.Right - (txtText.ActualWidth - 40)), 0.0));
Но это не работает, как ожидалось, прокручивается не до горизонтального положения курсора.
Думаю, у меня было чтобы описать это лучше:
если я перемещаю курсор с помощью стрелки влево или вправо, он будет работать нормально, ничего не реализуя.
Это не сработает, если я сделаю это:
Переход от одной строки к другой. Иногда одна из этих строк длиннее или короче другой, и в этом случае мне приходилось прокручивать до позиции курсора.
Пример:
Строка1 длиннее, чем строка2
Я перехожу с помощью клавиши «end» на клавиатуре до конца строки1.
Затем я перехожу к строке2.
Все работает правильно, каретка переходит в конец строки 2 и автоматически прокручивается в видимую область.
Но если я go вернулся с строки 2 на строку 1, каретка будет находиться прямо в конце строки 1. Но прокручивается не до конца строки 1.