如何为UWP应用程序滚动到TextBox底部?
随着我转向UWP,这是一个不太简单的问题。
我以前可以使用这个方法:
textBox.SelectionStart = textBox.TextLength;
textBox.ScrollToCaret();
但是,这对于UWP应用程序无效。
如何为UWP应用程序滚动到TextBox底部?
随着我转向UWP,这是一个不太简单的问题。
我以前可以使用这个方法:
textBox.SelectionStart = textBox.TextLength;
textBox.ScrollToCaret();
使用来自https://code.msdn.microsoft.com/windowsapps/How-to-scroll-to-the-a8ea5867的答案有时会导致向上滚动时删除行。
为解决此问题,请尝试以下方法:
private void ScrollToBottom(TextBox textBox)
{
var grid = (Grid)VisualTreeHelper.GetChild(textBox, 0);
for (var i = 0; i <= VisualTreeHelper.GetChildrenCount(grid) - 1; i++)
{
object obj = VisualTreeHelper.GetChild(grid, i);
if (!(obj is ScrollViewer)) continue;
((ScrollViewer)obj).ChangeView(0.0f, ((ScrollViewer)obj).ExtentHeight, 1.0f, true);
break;
}
}
((ScrollViewer)obj).ChangeView(0.0f, ((ScrollViewer)obj).ExtentHeight, 1.0f, true);
https://code.msdn.microsoft.com/windowsapps/How-to-scroll-to-the-a8ea5867
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
var grid = (Grid)VisualTreeHelper.GetChild(textBox1, 0);
for (var i = 0; i <= VisualTreeHelper.GetChildrenCount(grid) - 1; i++)
{
object obj = VisualTreeHelper.GetChild(grid, i);
if (!(obj is ScrollViewer)) continue;
((ScrollViewer)obj).ChangeView(0.0f, ((ScrollViewer)obj).ExtentHeight, 1.0f);
break;
}
}
}
其中textBox1是您想要滚动到底部的文本框。
在 C++/CX 中,与前面答案等效的代码如下:
using Windows::UI::Xaml::Media::VisualTreeHelper;
using Windows::UI::Xaml::Controls::Grid;
using Windows::UI::Xaml::Controls::ScrollViewer;
using Platform::Object;
void
MainPage::responseTextUpdated(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
Grid^ grid = static_cast<Grid^>(VisualTreeHelper::GetChild(responseText, 0));
for (int i = 0; i < VisualTreeHelper::GetChildrenCount(grid); ++i)
{
Object^ child = VisualTreeHelper::GetChild(grid, i);
ScrollViewer^ scrollViewer = dynamic_cast<ScrollViewer^>(child);
if (scrollViewer == nullptr) continue;
double const horizontalOffset = 0;
double const verticalOffset = scrollViewer->ExtentHeight;
float const zoomFactor = 1;
scrollViewer->ChangeView(horizontalOffset, verticalOffset, zoomFactor);
break;
}
}
当responseText是TextBox^ responseText
时,你想要滚动的TextBox(可能与发送者相同)。
responseText
替换为(TextBox^)responseText
或(TextBox^)sender
进行编辑。 - rboy