gpt4 book ai didi

windows-phone-7 - 如何在 WP8 中获取 LongListSelector 的 VerticalOffset

转载 作者:行者123 更新时间:2023-12-04 07:20:18 25 4
gpt4 key购买 nike

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

我一直在寻找,没有找到任何东西。我可以用一个给出列表中第一个可见元素的函数来解决,但我也没有找到任何东西。 ItemRealized 事件对此没有用,因为它没有给出显示在视口(viewport)顶部的确切项目。

最佳答案

这将为您提供 LLS 中的第一个可见项目。

private Dictionary<object, ContentPresenter> items;

private object GetFirstVisibleItem(LongListSelector lls)
{
var offset = FindViewport(lls).Viewport.Top;
return items.Where(x => Canvas.GetTop(x.Value) + x.Value.ActualHeight > offset)
.OrderBy(x => Canvas.GetTop(x.Value)).First().Key;
}

private void LLS_ItemRealized(object sender, ItemRealizationEventArgs e)
{
if (e.ItemKind == LongListSelectorItemKind.Item)
{
object o = e.Container.DataContext;
items[o] = e.Container;
}
}

private void LLS_ItemUnrealized(object sender, ItemRealizationEventArgs e)
{
if (e.ItemKind == LongListSelectorItemKind.Item)
{
object o = e.Container.DataContext;
items.Remove(o);
}
}

private static ViewportControl FindViewport(DependencyObject parent)
{
var childCount = VisualTreeHelper.GetChildrenCount(parent);
for (var i = 0; i < childCount; i++)
{
var elt = VisualTreeHelper.GetChild(parent, i);
if (elt is ViewportControl) return (ViewportControl)elt;
var result = FindViewport(elt);
if (result != null) return result;
}
return null;
}

关于windows-phone-7 - 如何在 WP8 中获取 LongListSelector 的 VerticalOffset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15121139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com