我正在尝试为屏幕键盘制作TextBox行为,它可以更新文本框中的文本,但我无法让它聚焦文本框并在完成文本后将插入符号移到文本的末尾更新
我尝试在两个订单中使用TextBox.Focus()和TextBox.Select()而没有运气。
感谢您的时间
答案 0 :(得分:6)
从输入事件处理程序中更改焦点(即鼠标单击虚拟键)将失败,因为鼠标向上事件(或键入)将焦点返回到原始元素。为了使其工作,您必须使用Dispatcher
对象将焦点命令调度到以后的时间。
示例:
Dispatcher.Invoke(new Action(() =>
{
textBox1.Focus();
textBox1.SelectionStart = textBox1.Text.Length;
// or textBox1.Select(textBox1.Text.Length,0);
}), System.Windows.Threading.DispatcherPriority.Background);
答案 1 :(得分:2)
这是一个简单的示例,一旦您更新了光标,就将光标移动到TextBox的末尾。
TextBox.Focus();
TextBox.Text = "sometext ";
TextBox.SelectionStart = TextBox.Text.Length;
答案 2 :(得分:1)
我有类似的情况,我将“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;
}
当人离开屏幕键盘并启动时,这种情况效率很低 使用真正的键盘,因为每个新字符将导致此处理程序 由于光标在真正的键盘上运行得很好,因此不必要地调用。欢迎任何更有效的解决方案!
希望有所帮助。 感谢。