Прокрутка до конца одной строки WPF TextBox - PullRequest
7 голосов
/ 30 октября 2010

Это кажется такой простой вещью, но я просто не могу заставить ее работать.

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

В событии GotFocus текстового поля я вызываю textBox.ScrollToEnd (). Похоже, все, что это делает, это перемещает курсор в конец текстового поля, но на самом деле не выводит его на экран.

Чего мне не хватает?

Ответы [ 3 ]

18 голосов
/ 30 октября 2010

Вы должны быть в состоянии сделать это, используя следующие члены:


РЕДАКТИРОВАТЬ: не уверен, почему ScrollToEnd не работает ... В любом случае, этот код работает:

textBox.CaretIndex = textBox.Text.Length;
var rect = textBox.GetRectFromCharacterIndex(textBox.CaretIndex);
textBox.ScrollToHorizontalOffset(rect.Right);
5 голосов
/ 04 октября 2012

Это правда - установка свойства каретки из кода не влияет на представление;и каретка может выходить за пределы видимой части.

kb_target_box.Focus(); // just for sure
Rect rect = kb_target_box.GetRectFromCharacterIndex(kb_target_box.CaretIndex);
kb_target_box.ScrollToHorizontalOffset(Math.Max((kb_target_box.HorizontalOffset + rect.Left - (kb_target_box.ActualWidth - 40)), 0.0));

h-scroll будет следовать за кареткой после того, как она приблизится к 40 к правой границе TextBox.

3 голосов
/ 24 мая 2012

Это сработало для меня.

textBox.CaretIndex = txt.Text.Length;  
textBox.ScrollToEnd();
...