【问题标题】:Problems using the ScrollToAsync() method from ScrollView in the OnAppearing() of a Content Page在内容页面的 OnAppearing() 中使用 ScrollView 中的 ScrollToAsync() 方法时出现问题
【发布时间】:2020-10-09 07:49:39
【问题描述】:

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

【问题讨论】:

  • 尝试调用base.OnAppearing();之后的行。
  • 它没有改变任何东西
  • 是的,你给我的答案奏效了。感谢您的帮助!

标签: c# android xamarin xamarin.forms async-await


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多