我有一个列表框,一次水平显示 5 个项目。我想实现一个“上一个”和“下一个”按钮,单击该按钮将显示上一组 5 个或下一组 5 个项目。我没有显示水平滚动条,因为我不希望用户使用它来导航。
是否已经实现了一些功能以便我可以做到这一点,或者我是否需要编写代码来计算我在按钮的点击事件中显示的项目等?
提前致谢!
我有一个列表框,一次水平显示 5 个项目。我想实现一个“上一个”和“下一个”按钮,单击该按钮将显示上一组 5 个或下一组 5 个项目。我没有显示水平滚动条,因为我不希望用户使用它来导航。
是否已经实现了一些功能以便我可以做到这一点,或者我是否需要编写代码来计算我在按钮的点击事件中显示的项目等?
提前致谢!
您可以使用内置的 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 显示五个项目,那么这些命令会将其移动五个项目。