我正在尝试为屏幕上的键盘制作文本框行为,它可以在文本框中更新文本,但是我无法将其集中在文本框中,并在更新文本后将其移至文本末尾。

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

谢谢你的时间

有帮助吗?

解决方案

将焦点从输入事件处理程序内部更改(即鼠标单击虚拟键)将失败,因为鼠标上的事件(或键 - UP)将返回焦点为原始元素。为了使其正常工作,您必须使用该命令将焦点命令派遣到以后的时间 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;

我也有类似的情况,如下所示,我将“文本变换”处理程序附加到文本框上。

<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;
}

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

希望有帮助。谢谢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top