zoukankan      html  css  js  c++  java
  • listbox滚动加载之特立独行。来源:http://googlers.iteye.com/blog/1320801

    ListBox的分页加载,相信在很多应用中大家都已经见到过了。但是在WP7开发中,这个功能开发起来似乎是不那么直观(因为没有那么个 ScrollEnd事件),我在学习开发这个功能的时候第一步是先百度谷歌Bing的,为了不重复造轮子。其实有很多人都在问这个问,大家的共同关注点只 有一个,就是如何判断ListBox的滚动条滚动到了底部,所以,此篇文章我也就只围绕如何判断滚动到底来展开了,其他的部分暂略。我记得曾经看到了一个 英文的文章实现了这个效果,写的很复杂,好多好多的类,本人比较懒,就没继续看……,后来从某中文论坛看到了一个非常简单的方法,不得不感叹我们中国人的 聪明才智啊。

      private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
            {
                List<ScrollBar> scrollBarList = GetVisualChildCollection<ScrollBar>(lstBizs);
                foreach (ScrollBar scrollBar in scrollBarList)
                {
                    if (scrollBar.Orientation == System.Windows.Controls.Orientation.Horizontal)
                    {
                        
                    }
                    else
                    {
                        scrollBar.ValueChanged += new RoutedPropertyChangedEventHandler<double>(verticalScrollBar_ValueChanged);
                    }
                }
            }
    
    
            private void verticalScrollBar_ValueChanged(object sender, RoutedEventArgs e)
            {
                ScrollBar scrollBar = (ScrollBar)sender;
                object valueObj = scrollBar.GetValue(ScrollBar.ValueProperty);
                object maxObj = scrollBar.GetValue(ScrollBar.MaximumProperty);
                if (valueObj != null && maxObj != null)
                {
                    double value = (double)valueObj;
                    double max = (double)maxObj - 1.0;
                    if (value >= max)
                    {
                       //读取下一页的数据
                    }
                }
            }
    

     

            public static List<T> GetVisualChildCollection<T>(object parent) where T : UIElement
            {
                List<T> visualCollection = new List<T>();
                GetVisualChildCollection(parent as DependencyObject, visualCollection);
                return visualCollection;
            }
            private static void GetVisualChildCollection<T>(DependencyObject parent, List<T> visualCollection) where T : UIElement
            {
                int count = VisualTreeHelper.GetChildrenCount(parent);
                for (int i = 0; i < count; i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(parent, i);
                    if (child is T)
                    {
                        visualCollection.Add(child as T);
                    }
                    else if (child != null)
                    {
                        GetVisualChildCollection(child, visualCollection);
                    }
                }
            }
    

        这个代码非常的简介精悍,并非我原创,但我直接拿过来之后发现它运行的很好,真的很好用。我唯一的一点修改就是“double max = (double)maxObj - 1.0; ”,这里说明一下,value是ScrollBar当前的值,max可想而知是最大值,但是如果当用户把滚动条拉到底部才开始加载下页数据,会明显的出现 一个停顿,所以我设定的规则是“当用户把滚动条拉到倒数第一行的时候就开始加载下页数据”,1.0的这个值按需求修改就好了。

  • 相关阅读:
    bzoj5178 [Jsoi2011]棒棒糖 主席树+线段树二分
    bzoj4408 [Fjoi 2016]神秘数 & bzoj4299 Codechef FRBSUM 主席树+二分+贪心
    bzoj3123 [Sdoi2013]森林 树上主席树+启发式合并
    bzoj4448 [Scoi2015]情报传递 主席树+树上差分
    bzoj4399 魔法少女LJJ 线段树合并+线段树二分+并查集
    CF1009F Dominant Indices 长链剖分
    bzoj4543 [POI2014]Hotel加强版 长链剖分+树形DP
    bzoj4009 [HNOI2015]接水果 整体二分+扫描线+树状数组+dfs序
    bzoj4940 [Ynoi2016]这是我自己的发明 莫队+dfs序
    bzoj5016 & loj2254 [Snoi2017]一个简单的询问 莫队
  • 原文地址:https://www.cnblogs.com/songtzu/p/2455559.html
Copyright © 2011-2022 走看看