Windows phone 7 如何获取WP8中LongListSelector的垂直偏移

Windows phone 7 如何获取WP8中LongListSelector的垂直偏移,windows-phone-7,windows-phone-8,longlistselector,Windows Phone 7,Windows Phone 8,Longlistselector,在WP7中,LongListSelector有一个底层的ScrollViewer,我可以从中恢复列表的垂直偏移量。但在WindowsPhone8中,没有底层的ScrollViewer或任何类似的类为我提供VerticalOffset属性 我一直在找,什么也没找到。我可以用一个函数来解决这个问题,它给出了列表中第一个可见的元素,但我也没有找到任何东西。ItemRealized事件在这方面没有用处,因为它没有给出在视口顶部显示的确切项目。这将给出LLS中的第一个可见项目 私有字典项; 私有对象Get

在WP7中,LongListSelector有一个底层的ScrollViewer,我可以从中恢复列表的垂直偏移量。但在WindowsPhone8中,没有底层的ScrollViewer或任何类似的类为我提供VerticalOffset属性


我一直在找,什么也没找到。我可以用一个函数来解决这个问题,它给出了列表中第一个可见的元素,但我也没有找到任何东西。ItemRealized事件在这方面没有用处,因为它没有给出在视口顶部显示的确切项目。

这将给出LLS中的第一个可见项目

私有字典项;
私有对象GetFirstVisibleItem(LongListSelector)
{
var offset=FindViewport(lls).Viewport.Top;
返回项。其中(x=>Canvas.GetTop(x.Value)+x.Value.ActualHeight>offset)
.OrderBy(x=>Canvas.GetTop(x.Value)).First().Key;
}
私有void LLS_ItemRealized(对象发送方,ItemRealizationEventArgs e)
{
if(e.ItemKind==LongListSelectorItemKind.Item)
{
对象o=e.Container.DataContext;
项目[o]=如集装箱;
}
}
私有void LLS_ItemUnrealized(对象发送方,ItemRealizationEventArgs e)
{
if(e.ItemKind==LongListSelectorItemKind.Item)
{
对象o=e.Container.DataContext;
删除(o)项;
}
}
专用静态视口控件FindViewport(DependencyObject父对象)
{
var childCount=VisualTreeHelper.GetChildrenCount(父级);
对于(变量i=0;i
在黑暗中拍摄-但我昨天问了一个类似的问题。看看答案。也许你可以用你的
LongListSelector
替换
ScrollViewer
?您不需要调用
ScrollToVerticalOffset()
,但是您可以执行类似的操作来获取偏移量?只是一个想法!问题是我不能用ScrollViewer替换LLS,我需要ItemsSource绑定,而自己做这件事不是一个好的选择。不过还是要谢谢你。请注意
GetTemplateChild(“ViewPortControl”).Viewport.Top
将为您提供垂直偏移量,但您无法滚动回它,因此您需要跟踪项目。工作正常,没有明显的性能开销。谢谢嗨pantaloons,如果LLS到达列表的末尾,我需要得到通知,我该怎么做?有什么线索吗?