windowsphone開發listbox滾到底
假如ListBox控制元件繫結的資料很大的時候,通常會造成載入的速度很慢,那麼有一種互動方案可以優化一下這種情況,就是先在ListBox上載入一部分 的資料,等到使用者檢視的時候將ListBox滾動到底的時候再載入一部分資料。但是在ListBox控制元件裡面根本就沒有相關的事件和屬性來判斷出來 ListBox什麼時候滾動到底了,那麼下面講解一種解決的方法。
ListBox控制元件其實是封裝了ScrollViewer控制元件和ScrollBar控制元件在裡面的。那這就好辦了,通過獲取ListBox控制元件裡面封裝的ScrollViewer控制元件,然後通過ScrollViewer控制元件的屬性就可以判斷出來ListBox控制元件是否滾動到底了。
下面看一下程式碼:
1 |
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> |
|
2 |
<ListBox Name="listbox1" MouseMove="listbox1_MouseMove" > |
3 |
</ListBox> |
|||
4 |
</Grid> |
|||
01 |
using System; |
02 |
using System.Collections.Generic; |
|
03 |
using System.Windows; |
04 |
using System.Windows.Controls; |
|
05 |
using System.Windows.Input; |
06 |
using System.Windows.Media; |
|
07 |
using Microsoft.Phone.Controls; |
08 |
|
|
09 |
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 |
} |
|
71 |
} |
相關文章
- 元素滾到到底部原理
- 一個div滾動到底部
- WPF ListBox ListBox.ItemTemplate DataTemplate
- 直播原始碼開發,實現 scroll-view 自動滾動到底部,並控制觸發頻率原始碼View
- 判斷滾動條是否到底部
- 判斷滾動條是否滑動到底部
- WPF ListBox ListBox.ItemTemplate DataTemplate Custom UserControl
- 實現報表滾動到底部翻頁效果
- 前端開發到底需要掌握哪些知識前端
- 開發軟體到底有多貴
- 自己封裝的滾動條滾到底部和可視區域的外掛封裝
- 直播軟體開發,自動滾動banner
- iOS開發之UIScrollView無限滾動iOSUIView
- 測試驅動開發到底好不好
- WPF ListBox DataTemplate MenuItem MVVMUIMVVM
- windowsphone中WebBrowser中的頁面按級回退功能WindowsWeb
- 學Python開發,學歷到底重不重要?Python
- android短影片開發,圖片視差滾動Android
- flutter sliver 多種滾動組合開發指南Flutter
- JS 控制 兩個ListBox之間選擇移動項 (轉發)JS
- 學習web前端開發,學歷到底重不重要?Web前端
- 低程式碼開發,到底有什麼優勢?
- 前端開發的難點到底在什麼地方?前端
- 溫故知新-輸入網址-顯示網頁-到底到底到底到底-發生了什麼?網頁
- vue無縫滾動的外掛開發填坑分享Vue
- 短視訊程式開發,RecyclerView自帶的滾動條View
- 如何實現報表滾動到底部進行翻頁的效果
- Flutter 滾動元件內容更新時自動定位到底端的方法Flutter元件
- 使用Netty,我們到底在開發些什麼?Netty
- 序列幀&一鏡到底H5開發實現分析H5
- 程式設計或者軟體開發到底算不算知識?程式設計
- 前端開發程式設計師的月薪到底有多高?前端程式設計師
- 矽谷和國內的 iOS 開發到底有何不同?iOS
- 開發遊戲到底需不需要女程式設計師?開發遊戲程式設計師
- 老闆說了,線上再出現慢查詢,開發就滾蛋!
- 直播app開發,在 Flutter 中使 Expanded 中的文字可滾動APPFlutter
- Android開發之TextView文字水平滾動效果實現AndroidTextView
- 前端外掛之Bootstrap Dual Listbox使用前端boot