zoukankan      html  css  js  c++  java
  • Windows Phone 7(WP7)开发 ListBox的分页加载

      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的这个值按需求修改就好了。

  • 相关阅读:
    java中JVM的原理重温【转】
    JavaBean 规范
    Java编程规范[转]
    spring mvc 多数据源切换,不支持事务控制[一]
    03-连连看-连通分析
    02-连连看-用例分析
    01参考资料
    03-稀疏矩阵
    02-对不重复的一组数据查找
    01-用链式结构打印学生成绩单
  • 原文地址:https://www.cnblogs.com/vistach/p/Windows_Phone_WP7_ListBox_ScrollBar_Multi_Page.html
Copyright © 2011-2022 走看看