我目前正在研究我的第一个 WPF 项目并尝试制作ListView
可滚动的。起初我认为这可以通过简单地限制ListView
' 的宽度和高度来轻松完成,从而在内容超出其空间时强制滚动条自动出现。起初这似乎很好,但由于处理的PreviewMouseDown
事件(它可以拖动列表的项目),它在选择项目后不起作用。
第二次尝试(使用ScrollViewer
)
<ScrollViewer>
<ListView ItemsSource="{Binding FileViewModels}"
PreviewMouseDown="ListView_MouseMove"
Height="450" Width="200"/>
</ScrollViewer>
当然,当列表的内容变得大于其最大高度时,这会导致第二个滚动条。选择项目后拖动栏仍然不起作用。
第三次(非常愚蠢的)尝试(禁用滚动条重复)
<ScrollViewer>
<ListView ItemsSource="{Binding FileViewModels}"
PreviewMouseDown="ListView_MouseMove"
Height="450" Width="200"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
</ScrollViewer>
这删除了滚动条副本并通过鼠标滚轮启用滚动,但禁用了滚动条,因此您无法通过单击并拖动它来移动。
第四次尝试(不变的大小ScrollViewer
)
<ScrollViewer Height="450" Width="200">
<ListView ItemsSource="{Binding FileViewModels}"
PreviewMouseDown="ListView_MouseMove"/>
</ScrollViewer>
从 中删除宽度/高度约束ListView
并将其移至ScrollViewer
. 这将启用滚动条并删除重复项。不幸的是,鼠标滚轮不再起作用(拖动滚动条可以正常工作)。
有人可以向我解释为什么鼠标滚轮不再起作用以及如何解决这个问题吗?
编辑 也许我应该回到我的第一个解决方案。
显然,ListView
的模板已经包含一个ScrollViewer
. 剩下的问题是,由于已处理的事件,我无法在选择项目后拖动滚动条PreviewMouseDown
(在这种情况下,通过 MouseWheel 滚动仍然有效)。我是否应该以不同的方式处理项目的拖动(在想要添加滚动条之前对我来说效果很好)?或者有没有办法检测光标是否在滚动条上方(所以我可以取消选择启用滚动的项目)?或者还有其他建议吗?