将光标放在所有文本框的末尾

时间:2021-05-24 13:53:42

标签: c# wpf xaml

解决方案: 正如评论中的 mm8 所指出的,解决方案是使用 ScrollToHorizo​​ntalOffset。我通过修改 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();

但在此之后,只有后者会滚动到最后。有没有办法把这两个文本框滚动到最后?

绑定文本字段(FileToConvertOutputFilePath)正在更新按钮和内容。

1 个答案:

答案 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;
相关问题