【问题标题】:Silverlight TextBox, moving caret positionSilverlight TextBox,移动插入符号位置
【发布时间】:2010-10-20 14:00:31
【问题描述】:

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

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

感谢您的宝贵时间

【问题讨论】:

    标签: silverlight textbox behavior caret


    【解决方案1】:

    从输入事件处理程序中更改焦点(即鼠标单击虚拟键)将失败,因为鼠标向上事件(或键向上)会将焦点返回到原始元素。为了使其工作,您必须使用 Dispatcher 对象将焦点命令分派到稍后的时间。

    例子:

    Dispatcher.Invoke(new Action(() =>
    {
        textBox1.Focus();
        textBox1.SelectionStart = textBox1.Text.Length;
        // or textBox1.Select(textBox1.Text.Length,0);
    }), System.Windows.Threading.DispatcherPriority.Background);
    

    【讨论】:

    • 啊,有道理。那我会调查一下非常感谢你
    • 顺便说一句,这适用于WPF,我没有在Silverlight上测试过,所以如果有任何问题请告诉我,即使我无法回答,我也有兴趣知道关于他们。
    • 不确定我是打算在 cmets 中做所有事情还是在下面添加新的响应,所以我已经做到了..
    【解决方案2】:

    这里是一个简单的例子,一旦你更新了一个文本框,就将光标移动到它的末尾。

    TextBox.Focus();
    TextBox.Text = "sometext ";
    TextBox.SelectionStart = TextBox.Text.Length;
    

    【讨论】:

      【解决方案3】:

      我有类似的情况,我在我的文本框中附加了一个“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;
      }
      

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

      希望对您有所帮助。 谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多