解决方案: 正如评论中的 mm8 所指出的,解决方案是使用 ScrollToHorizontalOffset。我通过修改 mm8 的答案让它工作,这是工作代码:
inputTextBox.ScrollToHorizontalOffset(inputTextBox.GetRectFromCharacterIndex(inputTextBox.Text.Length).Right);
有点长,但效果很好!
我有一个带有两个文本框的程序:
<TextBox x:Name="InputTextBlock" Grid.Row="1" Grid.Column="1" Margin="5,0,5,0"
Text="{Binding FileToConvert, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBox x:Name="OutputTextBlock" Grid.Row="3" Grid.Column="1" Margin="5,0,5,0"
Text="{Binding OutputFilePath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
当其中一个文本框更新时,第二个文本框也会更新,但两个文本框都应滚动到插入文本的末尾。这是因为有时这些输入/输出目录可能很长。
我已经尝试获取这两个文本框,并在后面的代码中编辑它们的属性,如下所示:
...
var inputTextBox = (System.Windows.Controls.TextBox) grid.GetElementByName("InputTextBlock");
var outputTextBox = (System.Windows.Controls.TextBox) grid.GetElementByName("OutputTextBlock");
inputTextBox.Focus();
inputTextBox.Select(inputTextBox.Text.Length, 0);
inputTextBox.ScrollToEnd();
outputTextBox.Focus();
outputTextBox.Select(outputTextBox.Text.Length, 0);
outputTextBox.ScrollToEnd();
但在此之后,只有后者会滚动到最后。有没有办法把这两个文本框滚动到最后?
绑定文本字段(FileToConvert
和 OutputFilePath
)正在更新按钮和内容。
答案 0 :(得分:1)
您可以像这样处理 TextChanged
事件:
void OnTextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = (TextBox)sender;
textBox.ScrollToHorizontalOffset(textBox.GetRectFromCharacterIndex(textBox.CaretIndex)
.Right);
}
InputTextBlock.TextChanged += OnTextChanged;
OutputTextBlock.TextChanged += OnTextChanged;