2010-01-04 75 views
3

我正在嘗試爲屏幕鍵盤創建文本框行爲,它可以更新文本框中的文本,但我無法使其將文本框對焦並將插入符號移動到末尾的文本一旦完成更新。Silverlight文本框,移動插入位置

我已經嘗試在沒有運氣的兩個命令中使用TextBox.Focus()和TextBox.Select()。

感謝您的時間

回答

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); 
+0

啊,這很有道理。我會研究那 非常感謝 – JeremyBeadle 2010-01-04 10:42:18

+0

順便說一句,這適用於WPF,我沒有在Silverlight上測試過,所以讓我知道是否有任何問題,即使我無法回答, d有興趣瞭解它們。 – 2010-01-04 10:44:44

+0

不知道我是否打算在評論中做所有事情,或者在下面添加新的回覆,所以我已經完成了.. – JeremyBeadle 2010-01-04 11:17:49

2

這裏是把光標移動到文本框的端部,一旦你已更新了它的一個簡單的例子。

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

我有類似的情況,我附加了一個「TextChanged」處理程序到我的文本框中,如下所示。

<TextBox Name="tbTextEntry" Width="200" HorizontalAlignment="Center" Background="Plum" Text="{Binding Entered_text,Mode=TwoWay}" TextChanged="OnTextChanged_Handler"></TextBox> 

與處理該事件是這樣的(感謝傑夫·貝克的評論以上):

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

這是效率低下的情況下,當一個人離開屏幕鍵盤,並開始 使用真正的鍵盤因爲每個新字符都會導致這個處理程序被不必要地調用 ,因爲光標在真正的鍵盤上工作得很好。歡迎任何更有效的解決方案

希望有所幫助。 謝謝。