Windows Phone 7 如何判斷ListBox控制項滾動到底

來源:互聯網
上載者:User
      假如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>
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using Microsoft.Phone.Controls;

namespace ListBoxUpdate
{
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();

for (int i = 0; i < 30; i++)
{
listbox1.Items.Add("項目"+i);
}

}

private void listbox1_MouseMove(object sender, MouseEventArgs e)
{
//擷取listbox的子類型ScrollViewer
ScrollViewer scrollViewer = FindChildOfType<ScrollViewer>(listbox1);//ScrollViewer scrollBar
if (scrollViewer == null)
{
throw new InvalidOperationException("erro");
}
else
{
//判斷當前滾動的高度是否大於或者等於scrollViewer實際可滾動高度,如果等於或者大於就證明到底了
if (scrollViewer.VerticalOffset >= scrollViewer.ScrollableHeight)
{
//處理listbox滾動到底的事情
for (int i = 0; i < 10; i++)
{
int k = listbox1.Items.Count;
listbox1.Items.Add("項目" + k);
k++;
}
}
}
}

//擷取子類型
static T FindChildOfType<T>(DependencyObject root) where T : class
{
var queue = new Queue<DependencyObject>();
queue.Enqueue(root);

while (queue.Count > 0)
{
DependencyObject current = queue.Dequeue();
for (int i = VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--)
{
var child = VisualTreeHelper.GetChild(current, i);
var typedChild = child as T;
if (typedChild != null)
{
return typedChild;
}
queue.Enqueue(child);
}
}
return null;
}
}
}
啟動並執行效果不知道大家有沒有更加好的解決方案???   下面有高人建議使用一個擴充過的Listbox控制項LazyListBox,查到的博文連結:http://blogs.msdn.com/b/ptorr/archive/2010/10/12/procrastination-ftw-lazylistbox-should-improve-your-scrolling-performance-and-responsiveness.aspx 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.