我正在开发一个包含多个ListView的WPF应用程序。 每个视图都有一个按钮,用户可以按下它来启动处理视图中项目的功能。 项目数量通常高达数千,并且可能需要几分钟才能完成。
现在,我希望选择并滚动当前正在处理的项目,以便用户可以预先知道已处理了多少。 这反过来也使得用户容易知道在选择的情况下,在发生错误的情况下哪个项目导致处理停止。
为此,我将ListView的SelectedIndex绑定到我的ScrollRow属性,我在处理函数中设置了该属性。 然后我使用事件SelectionChanged滚动到所选项目,该事件运行一个在所选项目上调用ScrollToView的函数。
我的窗口包含许多视图,因此主窗口上通常有一个包含视图的滚动条。 问题是,当我在视图中的一行上调用ScrollToView时,当用户想要在窗口中向下看另一个视图时,主窗口也会滚动到此视图。
我已经研究过直接设置滚动位置,但是没有找到任何方法来做到这一点。
当窗口中的视图滚动时,如何阻止窗口滚动?
答案 0 :(得分:1)
我不确定用户是否希望看到一个列表框为其他一千个项目设置动画
而是一个关于当前处理的小信息面板显示%进度,当前项目,时间...
但是......但是......我不是来问你的设计选择:-)
所以你应该做的是获取listView的scrollViewer,并在其上调用ScrollToVerticalOffset以使内容滚动而不会窃取焦点。
要查找scrollViewer,您可以在此问题中使用我的答案:
How do I get the start index and number of visible items in a ListView?
如果您想要更多的xaml /绑定解决方案,可以使用这种解决方案公开VerticalOffset:
http://marlongrech.wordpress.com/2009/09/14/how-to-set-wpf-scrollviewer-verticaloffset-and-horizontal-offset/