代码之家  ›  专栏  ›  技术社区  ›  TheGeekYouNeed

用按钮滚动列表框的VirtualzingStackPanel

  •  1
  • TheGeekYouNeed  · 技术社区  · 16 年前

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

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

    提前谢谢!

    2 回复  |  直到 16 年前
        1
  •  1
  •   Ray Burns    16 年前

    您可以使用内置的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()。

        2
  •  0
  •   Anvaka    16 年前