c# - 将光标置于所有文本框的末尾
问题描述
解决方案: 正如评论中的 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
) 正在使用按钮和内容进行更新。
解决方案
您可以TextChanged
像这样处理事件:
void OnTextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = (TextBox)sender;
textBox.ScrollToHorizontalOffset(textBox.GetRectFromCharacterIndex(textBox.CaretIndex)
.Right);
}
InputTextBlock.TextChanged += OnTextChanged;
OutputTextBlock.TextChanged += OnTextChanged;
推荐阅读
- angular - 在 Ionic 4 中导入 Ionic-Native File 插件
- excel - 将 countif / countifs 范围设置为仅范围中的最后一行
- uwsgi - 将 uWSGI 配置为不解释 PATH_INFO
- json - 解析 kubenetes pod 名称的更有效方法
- spring-boot - 使用 HTTPS 与 Solr 通信时出现 IOException
- node.js - Sinon 在 NodeJS 控制器中模拟 Promise.all
- dynamic - 如何在雪花中以动态值为中心
- rust - 调用 take 后如何继续使用迭代器?
- python - 如何获取包含值的 Sqlite3 列名?
- android-studio - Android中带有占位符/提示文本的纯文本框