none
为什么我的ListBox 滑动到底部自动加载数据代码存在问题? RRS feed

  • 问题

  •             if (visualState == "NotScrolling")
                {
                    var v1 = _scrollViewer[0].ExtentHeight - _scrollViewer[0].VerticalOffset;
                    var v2 = _scrollViewer[0].ViewportHeight;

                    v1 = float.Parse(v1.ToString());
                    v2 = float.Parse(v2.ToString());

                    if (v1 <= v2)
                    {
                       //这里加载新的一页的数据
                    }
    为什么很多时候v1比v2大呢?导致无法加载新的一页数据。
    2014年10月18日 9:23

全部回复

  • 是有这样的问题,可能是一些值不会这么的正好,你可以适当的减小不等式左边的值,比如if(v1-80<v2)之类的,滑倒接近低端的时候进行数据的加载
    2014年10月20日 2:51
  •   ListBox中的ScrollViewer的ExtentHeight是数据项的个数,比如ListBox有20条数据,那么ExtentHeight就是20

      ListBox中的VerticalOffset是表示当前位置,如果当前屏幕中显示的第一条是第12条数据,那么VerticalOffset就是12.xxx

      ListBox中的ViewportHeight是根据第一屏的数据计算的,把List滑动到顶部,然后计算出页面内有几个项,这个值是假定List内所有的项的大小都是一样的,如果ListBox中的ItemTemplate的高度不是相同大小的,就会出现误差,导致下面三种情况都可能出现

        ExtentHeight == VerticalOffset + ViewportHeight

        ExtentHeight > VerticalOffset + ViewportHeight

        ExtentHeight < VerticalOffset + ViewportHeight

     如果要用在ListBox上的话,需要保证每一项的高度都相同,否则会有误差(有时提前触发,有时候不触发)

    2014年10月22日 15:28