2011-02-09 6 views
4

Я хотел бы иметь возможность загружать больше данных в список при достижении начала или конца списка.Как получить точную позицию прокрутки в списке?

В моем списке показаны элементы, связанные с этим временем, когда я достигаю вершины и спускаюсь. Я хотел бы увидеть текст типа «Прокрутите вниз, чтобы получить больше предметов», и если вы сделаете это, он затем запускает загрузку данных для элементы, которые происходят раньше.

То же самое для нижнего элемента, если вы достаточно проскальзываете (под последним пунктом он запускает загрузку данных для предметов позже, чем указано).

У меня нет последовательного списка. Я хочу, чтобы загрузка данных запускалась только в том случае, если я прокручиваю вверх или вниз достаточно далеко и отпускаю. Надеюсь, это описание имеет смысл.

В основном то, что мне нужно знать, - это точное положение прокрутки в списке, и поэтому я могу определить, когда список был перетаскиван и выпущен далеко вниз или вверх. Для тех, у кого есть IPhone, эффект, которым я пользуюсь, используется в приложении Facebook.

Приветствия

/Jimmy

ответ

4

Вы ищете две разные вещи. Во-первых, вам нужно изменить макет по умолчанию для ListBox, чтобы иметь конечный элемент управления. Довольно приличная реализация была presented here - вы в основном вставляете дополнительный контроль после ItemPresenter в шаблон по умолчанию.

Ищет динамическую нагрузку, here is an implementation.

13

Чтобы получить точную позицию прокрутки, вам нужно попасть в ScrollViewer ListBox. Я использую это для цапф (вернуть позицию предыдущей прокрутки после tombstoning) - Я предполагаю, что он будет работать на ListBoxes тоже ..

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

Благодаря обоего вашим образцов помогли получить мой проект сделать. Однако я могу установить только один ответ как решение = / –

Смежные вопросы