这看起来很简单,但我无法让它发挥作用。
我有一个包含大量文字的单行文本框。我想要发生的是,只要文本框获得焦点,它就会滚动到文本的末尾,以便它进入视图,光标在最后准备接受新文本。
在文本框的GotFocus事件中,我调用textBox.ScrollToEnd()。看起来所有这一切都是将光标移动到文本框的末尾,但实际上并没有将结束视图。
我错过了什么?
答案 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();