我在代码隐藏文件中对 OnAppearing() 方法进行了重写,以自动滚动到特定元素,该元素是 XAML 文件中 ScrollView 元素内的子元素。我使用 ScrollView 元素中的方法
ScrollToAsync()
滚动到元素 MyBox,这是一个 BoxView 元素。
protected override async void OnAppearing()
{
await HorizontalScrollView.ScrollToAsync(MyBox, ScrollToPosition.Center, false);
base.OnAppearing();
}
我的问题是,当页面出现时,它不会自动滚动到 MyBox 元素。不过,如果我插入一个
Task.Delay()
,我就能让它工作。
protected override async void OnAppearing()
{
await System.Threading.Tasks.Task.Delay(1);
await HorizontalScrollView.ScrollToAsync(MyBox, ScrollToPosition.Center, false);
base.OnAppearing();
}
我的问题是,当我插入延迟时,它为什么起作用,有什么方法可以摆脱使用
Task.Delay()
语句?
您需要像下面这样调用 UIThread(主线程)中的行
protected override async void OnAppearing()
{
base.OnAppearing();
Device.BeginInvokeOnMainThread(async ()=> {
await HorizontalScrollView.ScrollToAsync(MyBox, ScrollToPosition.Center, false);
});
}
“设备”已弃用。现在你需要使用这个:
MainThread.BeginInvokeOnMainThread(...