Xamarin.forms 有没有办法检测CollectionView滚动是由用户启动还是由ScrollTo启动的?
我有一个页面,上面有一个Xamarin.forms 有没有办法检测CollectionView滚动是由用户启动还是由ScrollTo启动的?,xamarin.forms,collectionview,Xamarin.forms,Collectionview,我有一个页面,上面有一个CollectionView和Map。 有一个项目列表,CollectionView的ItemsSource被设置为该列表,并根据该列表绘制地图插脚,用户滚动CollectionView时,需要突出显示相对的地图插脚,当点击pin时,CollectionView将滚动到该项目 我使用ScrollTo和Scrolled事件。但问题是,当调用ScrollTo时,也会触发Scrolled事件,这会导致延迟或一些意外行为。 我试图设置一个标志: private int cente
CollectionView
和Map
。
有一个项目列表,CollectionView
的ItemsSource
被设置为该列表,并根据该列表绘制地图插脚,用户滚动CollectionView
时,需要突出显示相对的地图插脚,当点击pin时,CollectionView
将滚动到该项目
我使用ScrollTo
和Scrolled
事件。但问题是,当调用ScrollTo
时,也会触发Scrolled
事件,这会导致延迟或一些意外行为。
我试图设置一个标志:
private int centerIndex = -1;
bool userScroll;
private void CollectionView_Scrolled(object sender, ItemsViewScrolledEventArgs args)
{
if (centerIndex != args.CenterItemIndex)
{
if (userScroll)
MessagingCenter.Send<object, int>(this, Keys.GoToLocation, args.CenterItemIndex);
userScroll = true;
centerIndex = args.CenterItemIndex;
}
}
private void ScrollToVehicle(object arg1, Item item)
{
if (collectionView.ItemsSource != null && collectionView.ItemsSource.Cast<Item>().Contains(item))
{
userScroll = false;
collectionView.ScrollTo(item, position: ScrollToPosition.Center, animate: false);
}
}
private int centerIndex=-1;
bool用户滚动;
私有void CollectionView_已滚动(对象发送方,ItemsViewScrolledEventArgs args)
{
如果(centerIndex!=args.CenterItemIndex)
{
如果(用户滚动)
Send(this,Keys.GoToLocation,args.CenterItemIndex);
userScroll=true;
centerIndex=args.CenterItemIndex;
}
}
私人车辆(对象arg1,项目)
{
if(collectionView.ItemsSource!=null&&collectionView.ItemsSource.Cast().Contains(项目))
{
userScroll=false;
collectionView.ScrollTo(项目,位置:ScrollToPosition.Center,动画:false);
}
}
但问题是,
Scrolled
事件被多次调用(在if
语句中)尝试从调用ScrollTo之前滚动的CollectionView中取消订阅
collection.Scrolled -= CollectionView_Scrolled;
我猜你想在滚动到特殊位置时突出显示,你可以使用
ScrollTo
方法而不是Scrolled
@WendyZang MSFT我需要同时使用这两种方法。当请求ScrollTo
时,我不想触发Scrolled
事件