滚动到一行的末尾WPF TextBox

滚动到一行的末尾WPF TextBox

问题描述:

这似乎是这样一个简单的事情,但我不能让它工作。滚动到一行的末尾WPF TextBox

我有一个单行文本框,有很多文字。我想要发生的是,只要文本框收到焦点,它就会滚动到文本的末尾,以便它进入视图并且光标最后准备好接受新文本。

在文本框的GotFocus事件中,我调用textBox.ScrollToEnd()。它看起来像所有这些将光标移动到文本框的末尾,但实际上并没有将末端放到视图中。

我错过了什么?

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


编辑:不知道为什么ScrollToEnd不工作...无论如何,此代码有效:

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

我试图在GotFocus中调用textBox.ScrollToEnd(),但它没有将字符串的末尾放到焦点上。设置CaretIndex只会移动插入位置,但不会将该位置放在视图中。因此,如果我的文本框中包含的文字多于可以合适的文字,并且我想在焦点聚焦时滚动到结尾,那么我该怎么做?我在我的小示例中只有一个文本框,Width =“80”,在GotFocus方法中,我尝试了TextBoxBase.ScrollToEnd,TextBox.CaretIndex以及两者的组合,以滚动到长字符串的末尾。如果你有它的工作,你可以发布样本? – Flack 2010-10-30 03:31:22

+0

@Flack,看我更新的答案 – 2010-10-30 15:46:43

+0

谢谢。这样做效果更好,但是它取决于当您离开文本框时插入符的最后位置,它有点奇怪。它看起来像是与文本框的水平偏移量有关。我改变了最后一行来读取textBox.ScrollToHorizo​​ntalOffset(Math.Max(rect.Right,textBox.Horizo​​ntalOffset));现在看起来工作正常。谢谢您的帮助。 – Flack 2010-11-01 21:06:28

这对我有效。

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