我的情况是我的C#WPF应用程序包含一个ListView,其元素是Expanders。每个扩展器都包含一个带有ListViewItems的ListView。这是一张图片:
在右侧,您可以看到滚动条。那个ScrollBar是我的问题。它有两个问题:
在扩展列表上使用MouseWheel时,ScrollBar不起作用。我指的是从“Controller”到“FullInstallation”的区域。如果将鼠标悬停在标题上(“所有测试”),ScrollBar会滚动。我认为Expander中的ListView默认有一个ScrollBar,它“窃取”了MouseWheel事件。但是,我不知道该怎么办。
ScrollBar滚动扩展器项目,而不是滚动扩展器的内容。我的意思是,不可能向下滚动一点,而是总是向下滚动至少1个Expander项目。我希望滚动条滚动,以便可以看到例如“All Tests”Expander的一半。
图片显示禁用的滚动条,但通过缩小窗口,滚动条将启用。
到目前为止我尝试过:
外部ListView外的ScrollViewer :这解决了问题1,但这意味着MouseWheel完全不起作用!这是因为外部ListView生成了自己的ScrollViewer(使用Snoop来查找它),这会“窃取”MouseWheel事件。
将所有控件(ListView,Expander,ListViewItem)的所有MouseWheel事件重定向到ScrollViewer :我再次使用外部ListView外部的ScrollViewer,这次我使用了MouseWheel我的所有控件调用外部ScrollViewer的MouseWheel事件的事件。这确实有效,但是对于鼠标指针的某些位置它没有。例如,在两个ListViewItem之间有一个小的1毫米空间,其中没有捕获MouseWheel事件。或者在最后一个Expander(“Short Tests”)之后的底部。在那里,我没有得到任何活动。
我尝试了更多的东西,但没有进一步。 有谁知道如何解决这个问题?
祝福, 基督教
答案 0 :(得分:4)
1)有关如何在嵌套itemscontrols时编写附加行为以控制鼠标滚轮行为,请参阅:WPF Nested ScrollViewer / ListBox Scrolling
2)非虚拟化itemscontrol支持平滑滚动,请参阅:Is it possible to implement smooth scroll in a WPF listview?