Windows Phone 7 如何判断ListBox控件滚动到底

简介:

假如ListBox控件绑定的数据很大的时候,通常会造成加载的速度很慢,那么有一种交互方案可以优化一下这种情况,就是先在ListBox上加载一部分的数据,等到用户查看的时候将ListBox滚动到底的时候再加载一部分数据。但是在ListBox控件里面根本就没有相关的事件和属性来判断出来ListBox什么时候滚动到底了,那么下面讲解一种解决的方法。

ListBox控件其实是封装了ScrollViewer控件和ScrollBar控件在里面的。那这就好办了,通过获取ListBox控件里面封装的ScrollViewer控件,然后通过ScrollViewer控件的属性就可以判断出来ListBox控件是否滚动到底了。
下面看一下代码:

 

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            
<ListBox Name="listbox1" MouseMove="listbox1_MouseMove" >
            
</ListBox>
        
</Grid> 

 

 


 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Windows;  
  4. using System.Windows.Controls;  
  5. using System.Windows.Input;  
  6. using System.Windows.Media;  
  7. using Microsoft.Phone.Controls;  
  8.  
  9. namespace ListBoxUpdate  
  10. {  
  11.     public partial class MainPage : PhoneApplicationPage  
  12.     {  
  13.         public MainPage()  
  14.         {  
  15.             InitializeComponent();  
  16.  
  17.             for (int i = 0; i < 30; i++)  
  18.             {  
  19.                 listbox1.Items.Add("项目"+i);  
  20.             }  
  21.               
  22.         }  
  23.  
  24.         private void listbox1_MouseMove(object sender, MouseEventArgs e)  
  25.         {  
  26.             //获取listbox的子类型ScrollViewer  
  27.             ScrollViewer scrollViewer = FindChildOfType<ScrollViewer>(listbox1);//ScrollViewer  scrollBar  
  28.             if (scrollViewer == null)  
  29.             {  
  30.                 throw new InvalidOperationException("erro");  
  31.             }  
  32.             else  
  33.             {  
  34.                 //判断当前滚动的高度是否大于或者等于scrollViewer实际可滚动高度,如果等于或者大于就证明到底了  
  35.                 if (scrollViewer.VerticalOffset >= scrollViewer.ScrollableHeight)  
  36.                 {  
  37.                     //处理listbox滚动到底的事情  
  38.                     for (int i = 0; i < 10; i++)  
  39.                     {  
  40.                         int k = listbox1.Items.Count;  
  41.                         listbox1.Items.Add("项目" + k);  
  42.                         k++;  
  43.                     }  
  44.                 }  
  45.             }  
  46.         }  
  47.  
  48.         //获取子类型  
  49.         static T FindChildOfType<T>(DependencyObject root) where T : class  
  50.         {  
  51.             var queue = new Queue<DependencyObject>();  
  52.             queue.Enqueue(root);  
  53.  
  54.             while (queue.Count > 0)  
  55.             {  
  56.                 DependencyObject current = queue.Dequeue();  
  57.                 for (int i = VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--)  
  58.                 {  
  59.                     var child = VisualTreeHelper.GetChild(current, i);  
  60.                     var typedChild = child as T;  
  61.                     if (typedChild != null)  
  62.                     {  
  63.                         return typedChild;  
  64.                     }  
  65.                     queue.Enqueue(child);  
  66.                 }  
  67.             }  
  68.             return null;  
  69.         }  
  70.     }  

运行的效果

 

 

不知道大家有没有更加好的解决方法???
 
下面有高人建议使用一个扩展过的Listbox控件LazyListBox,查到的博文链接:
 
 

 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1078562



相关文章
|
JavaScript Linux C#
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
305 0
|
API C# Windows
C#实现操作Windows窗口句柄:遍历、查找窗体和控件【窗口句柄最全总结之一】
C#对Windows窗口或窗口句柄的操作,都是通过 P/Invoke Win32 API 实现的,DllImport引入Windows API操作窗口(句柄),可以实现枚举已打开的窗口、向窗口...
5483 0
C#实现操作Windows窗口句柄:遍历、查找窗体和控件【窗口句柄最全总结之一】
|
C++ Windows
C++ Windows窗口程序:子窗口控件之按钮类button
C++ Windows窗口程序:子窗口控件之按钮类button
1247 0
|
Windows
Windows程序设计——Windows单选按钮、复选框、分组框控件
Windows程序设计——Windows单选按钮、复选框、分组框控件
783 0
Windows程序设计——Windows单选按钮、复选框、分组框控件
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
1800 0
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
|
XML 开发框架 前端开发
Windows Phone快速入门需掌握哪些能力
在此之前,先普及下Windows Phone的概念和开发工具的介绍。 Windows Phone是微软公司开发的手机操作系统,它将微软旗下的Xbox Live游戏、Xbox Music音乐与独特的视频体验集成至手机中。2012年6月21日,微软正式发布Windows Phone 8,采用和Windows 8相同的Windows NT内核,同时也针对市场的Windows Phone 7.5发布Windows Phone 7.8。
305 0
Windows Phone快速入门需掌握哪些能力
|
移动开发 Android开发 开发者
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
在Build 2014大会上,微软正式发布了传闻已久的Windows Phone 8.1系统,所有的Windows Phone 8手机都可以升级,微软这次可谓是十分厚道。虽然并非迭代升级,但WP 8.1还是拥有很多重大更新,对于微软进一步完善移动平台拥有积极的意义。下面,就一起来了解一下WP 8.1的主要新特性。
350 0
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
|
Windows
Windows程序设计——(源代码)Windows单选按钮、复选框、分组框控件
Windows程序设计——(源代码)Windows单选按钮、复选框、分组框控件
273 0
|
Windows
Windows程序设计——窗口键盘消息滚动事件
Windows程序设计——窗口键盘消息滚动事件
347 0
|
编解码 前端开发 JavaScript
Windows Phone 下开发 LBS 应用
基于位置的服务(Location Based Service,LBS),它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务。
352 0