2011-02-09 89 views
4

我希望能夠加載更多的數據到列表框當我到達列表框的開始或結束。如何獲取列表框中的確切滾動位置?

我的列表框顯示的是與時間相關的項目,當我到達頂部並拉下時我想看到一些文本,例如「向下滾動以獲取更多項目」,如果這樣做,則會觸發數據下載早些時候發生的項目。

如果您滑動得足夠遠(在最後一個項目下觸發數據下載以便項目比列出的項目晚),對於底部項目也是如此。

我沒有一個無縫的列表框我希望數據下載觸發只有當我滾動upp或足夠遠,並釋放。 我希望這個描述有意義。

基本上我需要知道的是在列表框中的確切滾動位置,以便我可以確定何時列表已被拖動並釋放到遠處或向上。 對於那些有iPhone的人來說,我以後的效果在Facebook應用中使用。

乾杯

/吉米

回答

4

你要找的兩回事。首先,您需要更改列表框的默認佈局以擁有結束控件。一個相當不錯的實現是presented here - 您基本上在默認模板中的ItemPresenter之後插入額外的控件。

尋找動態加載,here is an implementation

13

爲了得到確切的滾動位置,你需要在列表框的ScrollViewer。我用這個支點(立碑後返回之前的滾動位置) - 我認爲它會爲列表框工作太..

var scrollViewer = FindScrollViewer(listBox); 
var offset = scrollViewer.VerticalOffset; 

static ScrollViewer FindScrollViewer(DependencyObject parent) 
{ 
    var childCount = VisualTreeHelper.GetChildrenCount(parent); 
    for (var i = 0; i < childCount; i++) 
    { 
     var elt = VisualTreeHelper.GetChild(parent, i); 
     if (elt is ScrollViewer) return (ScrollViewer)elt; 
     var result = FindScrollViewer(elt); 
     if (result != null) return result; 
    } 
    return null; 
} 
+0

感謝您既樣品的幫助讓我的項目完成。 但是我只能設置一個答案作爲解決方案= / – 2011-02-10 21:58:59