我正在尝试为屏幕键盘创建一个 TextBox 行为,它可以更新文本框中的文本,但我无法让它聚焦文本框并将插入符号移动到文本的末尾,一旦它完成更新。
我尝试在两个订单中都使用 TextBox.Focus() 和 TextBox.Select() 都没有运气。
谢谢你的时间
我正在尝试为屏幕键盘创建一个 TextBox 行为,它可以更新文本框中的文本,但我无法让它聚焦文本框并将插入符号移动到文本的末尾,一旦它完成更新。
我尝试在两个订单中都使用 TextBox.Focus() 和 TextBox.Select() 都没有运气。
谢谢你的时间
从输入事件处理程序中更改焦点(即鼠标单击虚拟键)将失败,因为鼠标向上事件(或键向上)会将焦点返回到原始元素。为了使其工作,您必须使用该Dispatcher
对象将焦点命令分派到以后的时间。
例子:
Dispatcher.Invoke(new Action(() =>
{
textBox1.Focus();
textBox1.SelectionStart = textBox1.Text.Length;
// or textBox1.Select(textBox1.Text.Length,0);
}), System.Windows.Threading.DispatcherPriority.Background);
这是一个简单的例子,在更新文本框后将光标移动到文本框的末尾。
TextBox.Focus();
TextBox.Text = "sometext ";
TextBox.SelectionStart = TextBox.Text.Length;
我有类似的情况,我在我的文本框中附加了一个“TextChanged”处理程序,如此处所示。
<TextBox Name="tbTextEntry" Width="200" HorizontalAlignment="Center" Background="Plum" Text="{Binding Entered_text,Mode=TwoWay}" TextChanged="OnTextChanged_Handler"></TextBox>
并像这样处理事件(感谢上面评论中的 Jeff Beck):
protected void OnTextChanged_Handler(object sender, RoutedEventArgs e)
{
TextBox my_text_box = (TextBox)sender;
my_text_box.SelectionStart = my_text_box.Text.Length;
Debug.WriteLine("OnTextChanged_Handler called !");
return;
}
这对于一个人离开屏幕键盘并开始使用真实键盘的情况是低效的,因为每个新字符都会导致这个处理程序被不必要地调用,因为光标在真实键盘上工作得很好。欢迎任何更有效的解决方案!
希望有帮助。谢谢。