滚动到一行的末尾WPF TextBox
问题描述:
这似乎是这样一个简单的事情,但我不能让它工作。滚动到一行的末尾WPF TextBox
我有一个单行文本框,有很多文字。我想要发生的是,只要文本框收到焦点,它就会滚动到文本的末尾,以便它进入视图并且光标最后准备好接受新文本。
在文本框的GotFocus事件中,我调用textBox.ScrollToEnd()。它看起来像所有这些将光标移动到文本框的末尾,但实际上并没有将末端放到视图中。
我错过了什么?
答
你应该能够使用这些成员做到这一点:
编辑:不知道为什么ScrollToEnd不工作...无论如何,此代码有效:
textBox.CaretIndex = textBox.Text.Length;
var rect = textBox.GetRectFromCharacterIndex(textBox.CaretIndex);
textBox.ScrollToHorizontalOffset(rect.Right);
答
这对我有效。
textBox.CaretIndex = txt.Text.Length;
textBox.ScrollToEnd();
答
确实如此 - 从代码设置脱字符属性不会影响视图;脱字符可以在可见部分之外。
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会在插入右边的文本框边框后,跟随插入符号。
+2
这适用于我,而其他方法都无效。 – 2016-07-22 07:40:57
我试图在GotFocus中调用textBox.ScrollToEnd(),但它没有将字符串的末尾放到焦点上。设置CaretIndex只会移动插入位置,但不会将该位置放在视图中。因此,如果我的文本框中包含的文字多于可以合适的文字,并且我想在焦点聚焦时滚动到结尾,那么我该怎么做?我在我的小示例中只有一个文本框,Width =“80”,在GotFocus方法中,我尝试了TextBoxBase.ScrollToEnd,TextBox.CaretIndex以及两者的组合,以滚动到长字符串的末尾。如果你有它的工作,你可以发布样本? – Flack 2010-10-30 03:31:22
@Flack,看我更新的答案 – 2010-10-30 15:46:43
谢谢。这样做效果更好,但是它取决于当您离开文本框时插入符的最后位置,它有点奇怪。它看起来像是与文本框的水平偏移量有关。我改变了最后一行来读取textBox.ScrollToHorizontalOffset(Math.Max(rect.Right,textBox.HorizontalOffset));现在看起来工作正常。谢谢您的帮助。 – Flack 2010-11-01 21:06:28