如何解决ScrollView滚动位置更新为时已晚
我有一个CarouselView,它根据正在查看的项目更改了它的ItemTemplate:
<!--Alarm Event UI-->
<CarouselView x:Name="cvAlarmEvents"
ItemsSource="{Binding AlarmEvents}"
CurrentItem="{Binding SelectedAlarmEvent}"
CurrentItemChangedCommand="{Binding CmdSelectedAlarmEventChanged}"
ItemTemplate="{StaticResource AlarmEventDataTemplateSelector}"
Grid.Row="2"
Margin="0,2,0"
BackgroundColor="#141d3d"
IsVisible="true"
Scrolled="CvAlarmEventsOnScrolled" />
每个DataTemplate是一个以ScrollView为父级的ContentView。 (我在文档中看到过这样的说法,不建议在任何其他可滚动布局中嵌套滚动视图,但是当我需要能够在项目之间滚动并且每个项目也必须具有可滚动内容时,我还能做什么?)>
<!--ContentView used in one of my DataTemplates-->
<ScrollView x:Name="scrollAe"
Margin="0,7,0"
BackgroundColor="#141d3d">
<!--Lots of lovely content-->
</ScrollView>
比方说,用户在某个项目上垂直滚动,然后将CarouselView滑动到下一个项目,然后再滑动回到上一个项目,则应将第一个项目的scrollY重置为0。可以看到哪个可以以编程方式将ScrollView的滚动位置更改为:
ScrollToAsync(0,false);
问题是,它不会更新,直到用户滚动回到上一个项目为止,此时用户可以看到发生了滚动位置重置,这不是我想要的。在用户回滚之前应将其重置。这是我目前的尝试,它根本无法正常工作。有时它可以工作,可能是1/5倍,但是我一直尝试在主线程上调用它并强制进行布局,这并不一致。
private async void OnScrollReset(object sender,Events.ScrollEventArgs e)
{
if (scrollAe.ScrollY > 0)
{
Device.BeginInvokeOnMainThread(async() =>
{
await scrollAe.ScrollToAsync(0,false);
});
scrollAe.ForceLayout();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。