WPF:如何在拖动 ListView 项目时允许在 ListView 中使用鼠标滚轮滚动?

Posted

技术标签:

【中文标题】WPF:如何在拖动 ListView 项目时允许在 ListView 中使用鼠标滚轮滚动?【英文标题】:WPF: How do I allow scrolling with the mouse wheel in a ListView while dragging ListView items? 【发布时间】:2010-10-29 21:56:50 【问题描述】:

我在我的 WPF 应用程序中实现了 ListView 的拖放操作。项目可以拖放到ListView 中,也可以拖放到ListView 旁边的TreeView 中。

目前,我已将其设置为当您拖动到ListView 的底部时,它会自动向下滚动列表。

我想知道的是,当我拖动它的项目时,是否有任何方法可以用鼠标滚轮滚动 ListView?我拖动时似乎没有触发鼠标滚轮事件。

【问题讨论】:

您想同时使用鼠标滚轮和鼠标左键吗?哎呀,我没那么协调。 只是想知道:谁会使用它?已经有足够多的人遇到拖放问题了,同时滚动听起来并不容易执行。 我会使用它,显然我们绝对需要它发生。您说的是哪种类型的拖放问题? 首先,我建议您在尝试执行此操作时使用 Spy++ 来观察流经 WMQ 的鼠标事件。在拖动过程中,确认滚动会生成消息。看到这些消息会让你更好地为使用互操作处理它们做好准备。 通常在任何应用程序中,您可以通过在列表边界拖动的同时移动条目来滚动。例如当项目位于列表的最底部时,向下滚动。我想这是大多数用户习惯的。 【参考方案1】:
    DragDrop.DoDragDrop(...) 之前创建(并启动)鼠标钩子助手 分析鼠标滚轮(+ 检查鼠标是否在控件上) 在DoDragDrop() 操作后停止(处置)鼠标钩子助手

注意:总是停止鼠标钩子助手,因为它可以在关闭窗口时冻结应用程序(我在 XP 上看到它)。

here你可以找到一个MouseHook,采用它(我发现了错误:))或类似的东西。

【讨论】:

以上是关于WPF:如何在拖动 ListView 项目时允许在 ListView 中使用鼠标滚轮滚动?的主要内容,如果未能解决你的问题,请参考以下文章

delphi 7 listview 拖动有阴影 如何解决。

ListView,是不是有一种简单的方法可以允许在内部拖动项目(内置)?

ScrollViewer 鼠标滚轮不滚动

wpf slider拖动滑块气泡提示

WPF列表框在拖动时自动滚动

求助,WPF如何实现控件的拖动与复制