博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WP7->界面->ListBox动态加载,滚动到底部时触发事件
阅读量:5877 次
发布时间:2019-06-19

本文共 4585 字,大约阅读时间需要 15 分钟。

问题:在使用ListBox时,我们有时想要listbox滚动到页面底部时立即显示下一部分的内容

  解决办法:ListBox控件并没有一个事件可以监控其Scroll当前的滑动情况,但ListBox含有ScrollBar子控件,如果我们可以监控其ScrollBar子控件是否移动到了底部,那我们就能监控ListBox是否滚动到了底部

 

示例:

应用启动时先为ListBox添加50个Item,当Scroll滑动到底部时,自动再添加50个Item

 

实现:

目录:

1)  创建一个基本应用并添加一个ListBox事件

2)  为ListBox添加事件代码

3)  测试运行

 

1  创建一个基本应用并添加一个ListBox控件

1)  创建一个基本的Windows Phone应用程序,OS版本7.0

2)  添加ListBox

1         
2
3

 

2  为ListBox添加事件代码

1)  在PhoneApplicationPage_Loaded事件中为listBox1添加50个Item

1         private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)2         {3             for (int i = 0; i < 50; i++)4             {5                 listBox1.Items.Add(i.ToString());6             }

2)  接着找出listBox1中所有的ScrollBar子控

1 private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)2         {3             for (int i = 0; i < 50; i++)4             {5                 listBox1.Items.Add(i.ToString());6             }7             //找到listBox1中属于ScrollBar的子控件8             List
scrollBarList = GetVisualChildCollection
(listBox1);

其中函数GetVisualChildCollection:

1 //返回parent控件中属于ScrollBar的子控件2         public static List
GetVisualChildCollection
(object parent) where T : UIElement3 {4 List
visualCollection = new List
();5 //查找parent控件中所有ScrollBar子控件,并通过visualCollection返回6 GetVisualChildCollection(parent as DependencyObject, visualCollection);7 return visualCollection;8 }
1 //查找parent控件中所有ScrollBar子控件,并通过visualCollection返回 2         private static void GetVisualChildCollection
(DependencyObject parent, List
visualCollection) where T : UIElement 3 { 4 //查找parent的子控件集合中存在的子级数目 5 int count = VisualTreeHelper.GetChildrenCount(parent); 6 for (int i = 0; i < count; i++) 7 { 8 //获取parent控件的i级子控件 9 DependencyObject child = VisualTreeHelper.GetChild(parent, i);10 if (child is T)11 {12 //若子控件属于ScrollBar控件则将之添加到结果List中13 visualCollection.Add(child as T);14 }15 else if (child != null)16 {17 //若子控件不属于ScrollBar控件,且不是null,则使用递归方法再次查询该子控件的子控件18 GetVisualChildCollection(child, visualCollection);19 }20 }21 }

3)  遍历listBox1的所有ScrollBar子控件,并为其绑定ValueChanged事件

1         private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 2         { 3             for (int i = 0; i < 50; i++) 4             { 5                 listBox1.Items.Add(i.ToString()); 6             } 7             //找到listBox1中属于ScrollBar的子控件 8             List
scrollBarList = GetVisualChildCollection
(listBox1); 9 //遍历scrollBarList10 foreach (ScrollBar scrollBar in scrollBarList)11 {12 if (scrollBar.Orientation == System.Windows.Controls.Orientation.Horizontal)13 {14 //该ScrollBar是水平显示的15 }16 else17 {18 //绑定该子控件的ValueChanged事件19 scrollBar.ValueChanged += new RoutedPropertyChangedEventHandler
(verticalScrollBar_ValueChanged);20 }21 }22 }

其中verticalScrollBar_ValueChanged函数:

1         //ScrollBar的ValueChanged事件 2         private void verticalScrollBar_ValueChanged(object sender, RoutedEventArgs e) 3         { 4             ScrollBar scrollBar = (ScrollBar)sender; 5             //读取ScrollBar的当前值与最大值 6             object valueObj = scrollBar.GetValue(ScrollBar.ValueProperty); 7             object maxObj = scrollBar.GetValue(ScrollBar.MaximumProperty); 8             if (valueObj != null && maxObj != null) 9             {10                 double value = (double)valueObj;11                 double max = (double)maxObj;12                 //当前值接近最大值时 即快滑到底部时13                 if (value >= max)14                 {15                     for (int i = 0; i < 50; i++)16                     {17                         listBox1.Items.Add(i.ToString());18                     }19                 }20             }21         }

 

3  测试运行

 

说明:

1)  这个办法是从网上找来的,我只是对其做了一些注释便于理解。

2)  这个方法其实不太好使,用户体验的感觉没有新浪微博的Android客户端那么流畅,希望有牛人能改进一下

 

 

 

 

转载于:https://www.cnblogs.com/cation/archive/2012/11/21/2780803.html

你可能感兴趣的文章
【Bitmap Index】B-Tree索引与Bitmap位图索引的锁代价比较研究
查看>>
oracle之检查点(Checkpoint)
查看>>
美国数学月刊征解题
查看>>
[zz]Lessons from Pixar: Why Software Developers Should Be Storytellers
查看>>
C# 导出数据到Excel模板中(转)
查看>>
UVA532 Dungeon Master
查看>>
sqlite3开发环境搭建
查看>>
关于Microsoft CRM 2013自动保存Autosave功能的10点说明
查看>>
分页-Page
查看>>
Yii2 自定义独立验证器
查看>>
php 利用socket发送GET,POST请求
查看>>
iPhone/android的viewport 禁止页面自动缩放
查看>>
Redis集群~StackExchange.redis连接Sentinel服务器并订阅相关事件(原创)
查看>>
数据搬运工DSS~介绍
查看>>
大叔推荐博客索引
查看>>
EF架构~一个规范,两个实现(续)~性能可以接受的批量增删改操作
查看>>
为TextBox装饰水印
查看>>
ES6 箭头函数易出错细节
查看>>
[leetcode]143. Reorder List
查看>>
逆波兰表达式
查看>>