Вы можете использовать встроенные команды ScrollViewer.PageUp () и ScrollViewer.PageDown (), например:
public void ShowNextPage()
{
InvokeOnScrollViewer(listBox, viewer => viewer.PageDown());
}
public void ShowPriorPage()
{
InvokeOnScrollViewer(listBox, viewer => viewer.PageUp());
}
public void InvokeOnScrollViewer(ItemsControl control, Action<ScrollViewer> action)
{
for(Visual vis = control as Visual; VisualTreeHelper.GetChildCount(vis)!=0; vis = VisualTreeHelper.GetChild(vis, 0))
if(vis is ScrollViewer)
{
Action((ScrollViewer)vis);
break;
}
}
Как это работает: InvokeOnScrollViewer сканирует визуальное дерево, пока не найдет ScrollViewerзатем вызывает для него заданное действие, а именно PageUp () или PageDown ().
Когда ваша ItemsPanel является StackPanel (либо с ориентацией, либо с виртуализацией, либо нет), ScrollViewer.PageUp () перемещается назад наодин видовой экран и ScrollViewer.PageDown () перемещается вперед на один видовой экран.Другими словами, если ваш ListBox показывает пять элементов, то эти команды перемещают его на пять элементов.