3

我正在尝试为屏幕键盘创建一个 TextBox 行为,它可以更新文本框中的文本,但我无法让它聚焦文本框并将插入符号移动到文本的末尾,一旦它完成更新。

我尝试在两个订单中都使用 TextBox.Focus() 和 TextBox.Select() 都没有运气。

谢谢你的时间

4

3 回答 3

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);
于 2010-01-04T10:38:28.393 回答
2

这是一个简单的例子,在更新文本框后将光标移动到文本框的末尾。

TextBox.Focus();
TextBox.Text = "sometext ";
TextBox.SelectionStart = TextBox.Text.Length;
于 2010-01-04T10:39:23.123 回答
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;
}

这对于一个人离开屏幕键盘并开始使用真实键盘的情况是低效的,因为每个新字符都会导致这个处理程序被不必要地调用,因为光标在真实键盘上工作得很好。欢迎任何更有效的解决方案!

希望有帮助。谢谢。

于 2010-10-20T05:52:09.477 回答