首页 > 解决方案 > 将光标置于所有文本框的末尾

问题描述

解决方案: 正如评论中的 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) 正在使用按钮和内容进行更新。

标签: c#wpfxaml

解决方案


您可以TextChanged像这样处理事件:

void OnTextChanged(object sender, TextChangedEventArgs e)
{
    TextBox textBox = (TextBox)sender;
    textBox.ScrollToHorizontalOffset(textBox.GetRectFromCharacterIndex(textBox.CaretIndex)
        .Right);
}

InputTextBlock.TextChanged += OnTextChanged;
OutputTextBlock.TextChanged += OnTextChanged;

推荐阅读