使用按钮滚动ListBox的VirtualizingStackPanel

时间:2010-06-17 08:23:36

标签: c# wpf virtualizingstackpanel

我有一个Listbox,一次显示5个项目,水平。我想实现一个'上一个'和'下一个'按钮,当点击它时,将显示前一组5或下一组5项。我没有显示水平滚动条,因为我不希望用户使用它进行导航。

是否已经实现了一些功能,所以我可以这样做,或者我是否需要在按钮的点击事件中编写代码来计算我正在显示的项目等?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以使用内置的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显示五个项目,那么这些命令会将它移动五个项目。

答案 1 :(得分:0)

查看ListBox.ScrollIntoView()方法。