Windows Phone 7 ListBox 滚动到最后一条的问题 ( ListBox scrolling to the bottom )
最近做一个windows phone 7 聊天软件的项目,聊天列表用的是Listbox,DataTemplate用了十几种模板,而且其中的有的模板高度是随着聊天的内容长度变化的,这就导致了,ListBox 滚动时出现了很多奇怪的现象:滚动不到最后一条,卡在某一条不能滚动,屏幕晃动等。从网上找了很多关于ListBox的内容,这条最有帮助: ListBox performance,是微软的开发人员讲述的ListBox使用规范,这其中重点强调了要使ListBox中的DataTemplate要有固定高度。但这无法满足我的DataTemplate对变高的需求。在查看中,发现ListBox 默认用到了虚拟化VirtualizingStackPanel (VSP),试着去掉这个虚拟化改用stackpanel后,发现问题一下解决了。
下面是代码,加到ListBox 中就好了。
<ListBox.ItemsPanel> <ItemsPanelTemplate> <StackPanel> </StackPanel> </ItemsPanelTemplate> </ListBox.ItemsPanel>
VirtualizingStackPanel (VSP)虚拟化虽然能提高显示性能,但是在变高DataTemplate情况下效果很差,去除后,滚动到ListBox底部变得很美观,最后一项也不会被遮挡半边了。
当然要想让ListBox滚动到底部,还是比较容易的,直接调用ListBox自带的Api就好了:
this.ListBox.UpdateLayout();
if (this.ListBox.Items.Count > 0)
this.ListBox.ScrollIntoView(this.ListBox.Items.ElementAt(this.ListBox.Items.Count - 1));
this.ListBox.UpdateLayout();
作者:月食之后
出处:http://www.cnblogs.com/aftereclipse/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。