2017-07-06 50 views
0

我試圖在文本填充全部文本之後,將文字尾部的一個符號TextBoxes設置爲一個接一個。我知道有很多方法可以設置,但都需要TextBox位於Focus。我的問題是,這樣做一次意味着只有最後一個TextBox受到影響。我相信這是因爲用戶界面只受到一次全部影響,因此只應用了一個Focus。任何解決方法一次設置多個脫字符號定位?將插入位置設置爲多個文本框的末端

 txtImagesFolder.Select(txtImagesFolder.Text.Length, 0); 
     txtImagesFolder.Focus(); 

     txtTextFolder.Select(txtTextFolder.Text.Length, 0); 
     txtTextFolder.Focus(); 
+1

只能有一個_is_插入符號。你想達到什麼目的? – CodeCaster

+0

您是否嘗試在設置焦點後移動您的選擇? – Paul

+0

@CodeCaster所有文本框應顯示其文本的右側。如果文本框的寬度比文本更多,則左側將隱藏在左側。如果使用文本填充文本框,則左側文本仍然可見,右側隱藏。我希望所有右側的文字可見。焦點實際上不是問題/關注點。它似乎有必要設置插入符號。 – windowskm

回答

1

你可以滾動每個TextBox到右側是這樣的:

txtImagesFolder.CaretIndex = txtImagesFolder.Text.Length - 1; 
var rect = t1.GetRectFromCharacterIndex(txtImagesFolder.CaretIndex); 
txtImagesFolder.ScrollToHorizontalOffset(rect.Right); 

創建一個方法,並調用它的每個TextBox

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    ScrollToRight(txtImagesFolder); 
    ScrollToRight(txtTextFolder); 
} 

private void ScrollToRight(TextBox textBox) 
{ 
    textBox.CaretIndex = textBox.Text.Length - 1; 
    var rect = textBox.GetRectFromCharacterIndex(textBox.CaretIndex); 
    textBox.ScrollToHorizontalOffset(rect.Right); 
} 

這似乎爲我工作。然而,我遇到的後續問題是,在我打電話給ScrollToRights之前,我沒有把握它們的StackPanel。這意味着該協議沒有收到任何協調。我試着從StackPanel的IsVisibleChanged事件調用它,但這當然也發生在UI更新之前。有關解決方法的任何想法?

使用調度:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    sp.Visibility = Visibility.Visible; 

    Dispatcher.BeginInvoke(new Action(() => 
    { 
     ScrollToRight(txtImagesFolder); 
     ScrollToRight(txtTextFolder); 
    }), System.Windows.Threading.DispatcherPriority.Background); 
} 
+0

這似乎適用於我。然而,我遇到的後續問題是,在我調用我的ScrollToRight之前,我沒有弄清楚一個包含它們的StackPanel。這意味着該協議沒有收到任何協調。我試着從'StackPanel'的'IsVisibleChanged'事件調用它,但這當然也發生在UI更新之前。有關解決方法的任何想法? – windowskm

+0

請參閱我編輯的答案。 – mm8

+0

太棒了,謝謝。 – windowskm

相關問題