在尝试填充文本之后,我试图将一些TextBoxes
的插入符号一个接一个地设置到文本的末尾。我了解有多种方法可以设置此项,但似乎所有方法都要求TextBox
位于Focus
。我的问题是,一次性完成此操作意味着只有最后一个TextBox
受到影响。我相信这是因为UI只会同时受到影响,因此只应用了一个Focus
。任何解决方法一次设置多个插入位置?
txtImagesFolder.Select(txtImagesFolder.Text.Length, 0);
txtImagesFolder.Focus();
txtTextFolder.Select(txtTextFolder.Text.Length, 0);
txtTextFolder.Focus();
答案 0 :(得分: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。这意味着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);
}