我有一个文本框(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。
答案 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
...希望这有帮助!