WPF TreeView内部拖动项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF TreeView内部拖动项相关的知识,希望对你有一定的参考价值。

在现有WPF TreeView控件内实现项目拖放的最佳策略是什么?它应该是MVVM,并且应该具有从一个位置拖动到另一位置的项目的预览。

已经看过一些解决方案。如果我使用Canvas,则几乎可以实现任何东西,但是我需要从头开始进行控制,这就像考虑到我需要现有的TreeView功能而重新发明轮子一样。曾经尝试过PopUp和Thumb,但是我很困惑如何正确地使用它们来实现此功能。同样,我可以对目标TreeViewItems上方的对象使用PreviewMouseOver。我应该能够根据某些规则取消放下动作,例如,我不能将汽车对象放到动物类别上。

已经检查了一些商业解决方案,它们确实具有类似的内置功能;但我想知道是否还有任何免费或开源解决方案?或者至少要了解他们如何在商业图书馆中实现该功能?

答案

我已经在WPF中实现了很多拖放操作,我会先告诉您,要做好它需要一些实际的工作-但这绝对是值得的。

如果您想自己实现它,建议您在以下[ms0] msdn文档中进行研究。您需要实现Drag and Drop Overview部分中列出的事件。

要解决您的问题的特定要点:

    Drag-and-Drop Events事件中实现
  • “关于特定放置目标可以接受的放置的规则”。在该事件期间,您可以将DragOver设置为e.Effects以指示不允许删除,或者将其设置为其他值之一以指示如何解释该丢弃。
  • 最好使用e.Effects完成要拖动项目的预览。您可以在拖动操作期间创建跟随鼠标的装饰器,甚至可以使它显示使用None拖动的UI元素的图像。只需知道Adorners之类的普通鼠标事件在进行拖放操作时将无法正常工作,因此您必须坚持[C0​​](仅当VisualBrush设置为[C0 ]),或使用一些p /调用魔法。您可以查看关于这个确切主题的问题以及我最终想到的答案:MouseMove

以上是关于WPF TreeView内部拖动项的主要内容,如果未能解决你的问题,请参考以下文章

wpf 自定义treeview 如何获得树节点集合

求:WPF中TreeView如何实现展开一个节点其他节点关闭!

wpf中怎么为treeview动态添加子菜单

wpf中mousedown事件在执行几次拖动后,老出现方法不正确的情况,有解决方法的大侠给解决一下,谢谢

wpf treeview节点前面添加图标

wpf treeview节点前面添加图标