在内容页面的 OnAppearing() 中使用 ScrollView 的 ScrollToAsync() 方法时出现问题

问题描述 投票:0回答:2

我在代码隐藏文件中对 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()
语句?

c# android xamarin xamarin.forms async-await
2个回答
1
投票

您需要像下面这样调用 UIThread(主线程)中的行

protected override async void OnAppearing()
{
    base.OnAppearing();

    Device.BeginInvokeOnMainThread(async ()=> {
        await HorizontalScrollView.ScrollToAsync(MyBox, ScrollToPosition.Center, false);
    });
}

0
投票

“设备”已弃用。现在你需要使用这个:

MainThread.BeginInvokeOnMainThread(...
© www.soinside.com 2019 - 2024. All rights reserved.