如何在列表框中获得确切的滚动位置?

时间:2011-02-09 23:30:12

标签: silverlight windows-phone-7 listbox

当我到达列表框的开头或结尾时,我希望能够将更多数据加载到列表框中。

当我到达顶部并向下拉时,我的列表框显示与时间相关的项目我希望看到一些文本,例如“向下滚动以查找更多项目”,如果这样做,则会触发项目的数据下载发生得更早。

对于底部项目同样的事情,如果你足够远(在最后一项下面,它会触发比列出的项目更晚的项目的数据下载)。

我不是在无缝列表框之后我想要仅在我滚动upp或向下滚动并释放时才触发数据下载。 我希望这种描述有意义。

基本上我需要知道的是列表框中的确切滚动位置,以便我可以确定何时拖动和释放列表很远或者向下。 对于那些拥有iPhone的用户,我所使用的效果会在Facebook应用中使用。

干杯

/麦

2 个答案:

答案 0 :(得分:13)

要获得ListBox的ScrollViewer所需的确切滚动位置。我将它用于Pivots(在逻辑删除后返回前一个滚动位置) - 我认为它也适用于ListBoxes ..

var scrollViewer = FindScrollViewer(listBox);
var offset = scrollViewer.VerticalOffset;

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

答案 1 :(得分:4)

你正在寻找两件事。首先,您需要更改ListBox的默认布局以具有结束控件。一个相当不错的实现是presented here - 您基本上是在默认模板中ItemPresenter之后插入一个额外的控件。

寻找动态加载here is an implementation