C# 将插入符号位置设置为多个文本框的结尾

C# 将插入符号位置设置为多个文本框的结尾,c#,wpf,C#,Wpf,我试图在所有文本填充完毕后,将许多文本框的插入符号设置为一个接一个的文本结尾。我知道有很多种设置方法,但似乎都要求文本框处于焦点。我的问题是,一次完成这一切意味着只有最后一个文本框受影响。我相信这是因为UI一次只受影响,所以只应用了一个焦点。一次设置多个插入符号位置的任何解决方法 txtImagesFolder.Select(txtImagesFolder.Text.Length, 0); txtImagesFolder.Focus(); txt

我试图在所有文本填充完毕后,将许多
文本框的插入符号设置为一个接一个的文本结尾。我知道有很多种设置方法,但似乎都要求
文本框
处于
焦点
。我的问题是,一次完成这一切意味着只有最后一个
文本框受影响。我相信这是因为UI一次只受影响,所以只应用了一个
焦点
。一次设置多个插入符号位置的任何解决方法

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

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

您可以向右滚动每个
文本框,如下所示:

txtImagesFolder.CaretIndex = txtImagesFolder.Text.Length - 1;
var rect = t1.GetRectFromCharacterIndex(txtImagesFolder.CaretIndex);
txtImagesFolder.ScrollToHorizontalOffset(rect.Right);
创建一个方法并为每个
文本框调用它:

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。这意味着rect不接收任何坐标。我尝试从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);
}

只有一个插入符号。你想达到什么目的?你在设置焦点后尝试过移动你的选择吗?@CodeCaster所有的文本框都应该显示文本的右侧。如果文本框的文本超过宽度,则左侧将隐藏在左侧。如果用文本填充文本框,则左侧文本仍然可见,右侧隐藏。我想所有的右手边的文字可见。焦点实际上不是一个问题/担忧。似乎有必要设置插入符号。如果希望键入的内容影响每个文本框,则需要查看控件的更改事件,并在不同文本框之间复制文本。@Paul建议不错,但我也尝试过先设置焦点。这似乎对我有效。然而,我遇到的一个后续问题是,在调用我的
ScrollToRight
s之前,我正在打开一个存放它们的
StackPanel
。这意味着rect不接收任何坐标。我试着从
StackPanel
IsVisibleChanged
事件调用它,但这当然也发生在UI更新之前。有什么解决办法吗?