TextBox ScrollToHorizo​​ntalOffset在文本足够长时不会滚动

时间:2010-12-18 03:33:48

标签: c# wpf textbox scroll overflow

我有一个文本框(textBox1作为示例),我定期附加一个字符(每隔一秒左右)。我希望这样做,以便当文本太长而无法容纳在文本框中时,溢出实际上将朝向文本框的左侧,即使它没有聚焦而不是正常的行为,这是最后一个字符将永远显示。 我这样做的方式就是当我添加我正在做的角色时:

textBox1.ScrollToHorizontalOffset(textBox1.GetRectFromCharacterIndex(textBox1.Text.Length).Right);

这很好用,直到文本的长度足够长。在这一点之后,滚动将停止并且当前的左溢出将保持不变,但新的溢出将转到文本框的右侧。 为了测试我在每次更新时写入当前文本的长度和 textBox1.GetRectFromCharacterIndex(textBox1.Text.Length).Right 到控制台:

...
Length: 22
Rect.Right: 81.99
Length: 23
Rect.Right: 85.4
Length: 24
Rect.Right: 88.81
Length: 25
Rect.Right: 91.41
Length: 26
Rect.Right: 91.41
Length: 27
Rect.Right: 91.4099999999999
Length: 28
Rect.Right: 91.4099999999999
Length: 29
Rect.Right: 91.4099999999999
Length: 30
Rect.Right: 91.4099999999999
...
Length: 47
Rect.Right: 91.4099999999999
Length: 48
Rect.Right: 91.4099999999999
Length: 49
Rect.Right: 91.4099999999999
Length: 50
Rect.Right: 91.4099999999999
Length: 51
Rect.Right: 91.4099999999999
Length: 52
Rect.Right: 92.88
Length: 53
Rect.Right: 94.8199999999999
Length: 54
Rect.Right: 96.29
Length: 55
Rect.Right: 98.2299999999999
Length: 56
Rect.Right: 99.7
Length: 57
Rect.Right: 101.64

在Text.Length为25之前,文本框仍然足够宽以适应所有内容。在此之后,文本不再适合,滚动工作直到长度为52。

2 个答案:

答案 0 :(得分:3)

这种行为很奇怪 - 我再现了一样。

我使用

获得了您正在寻找的效果
textbox1.ScrollToHorizontalOffset(double.MaxValue);

由于你想要一直向右滚动,传递一个大于角色实际位置的值是没有害处的。

答案 1 :(得分:0)

以上所有内容对我来说都不可靠。在做其他事情时,我偶然发现了这种方法(使用选择突出显示)。 TB是TextBox,ofs是所需偏移量的字符索引。

TB.Focus();   //must be used
TB.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Right;
TB.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Left;
TB.Select(0, ofs);   //select up through desired offset
TB.Select(0, 0);     //turn off selection

...希望这有帮助!