滚动到单行WPF TextBox的末尾

时间:2010-10-29 20:38:22

标签: wpf wpf-controls

这看起来很简单,但我无法让它发挥作用。

我有一个包含大量文字的单行文本框。我想要发生的是,只要文本框获得焦点,它就会滚动到文本的末尾,以便它进入视图,光标在最后准备接受新文本。

在文本框的GotFocus事件中,我调用textBox.ScrollToEnd()。看起来所有这一切都是将光标移动到文本框的末尾,但实际上并没有将结束视图。

我错过了什么?

3 个答案:

答案 0 :(得分:17)

你应该能够使用这些成员来做到这一点:


编辑:不确定为什么ScrollToEnd不能正常工作......无论如何,这段代码有效:

textBox.CaretIndex = textBox.Text.Length;
var rect = textBox.GetRectFromCharacterIndex(textBox.CaretIndex);
textBox.ScrollToHorizontalOffset(rect.Right);

答案 1 :(得分:5)

确实如此 - 从代码中设置插入符属性不会影响视图;插入符号可以在可见部分之外。

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边框后跟随插入符号。

答案 2 :(得分:3)

这对我有用。

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