WPF TreeView将项目拖动到内部

WPF TreeView将项目拖动到内部,wpf,drag-and-drop,treeview,Wpf,Drag And Drop,Treeview,在现有WPF TreeView控件中实现项目拖放的最佳策略是什么?它应该是MVVM,并且应该具有从一个位置拖到另一个位置的项目预览 他已经考虑了一些解决办法。如果我使用Canvas,我几乎可以实现任何东西,但是我需要从头开始控制,考虑到我需要现有的TreeView功能,这看起来像是重新发明轮子。我尝试了弹出和拇指,但我不知道如何正确地使用它们来实现这个功能。另外,我可以使用PreviewMouseOver处理目标树视图项上方的对象,这也是有意义的;我应该能够根据特定规则取消放置操作,例如,我不能

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

他已经考虑了一些解决办法。如果我使用Canvas,我几乎可以实现任何东西,但是我需要从头开始控制,考虑到我需要现有的TreeView功能,这看起来像是重新发明轮子。我尝试了弹出和拇指,但我不知道如何正确地使用它们来实现这个功能。另外,我可以使用PreviewMouseOver处理目标树视图项上方的对象,这也是有意义的;我应该能够根据特定规则取消放置操作,例如,我不能将汽车对象放置到动物类别


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

我在WPF中实现了很多拖放功能,我会提前告诉您,要做好这项工作需要做一些实际工作,但这绝对是值得的

如果您想自己实现它,我建议您在这里学习msdn文档:。您需要实现本节中列出的事件

要解决问题的具体要点,请执行以下操作:

  • DragOver
    事件中实施特定投放目标可以接受的投放的“规则”。在该事件期间,设置为
    None
    表示不允许删除,或设置为其他值之一表示如何解释删除
  • 拖动项目的预览最好使用。您可以在拖动操作期间创建跟随鼠标的装饰器,甚至可以使用
    VisualBrush

    只需知道,当拖放操作正在进行时,像
    MouseMove
    这样的普通鼠标事件不起作用,因此您必须坚持使用
    DragOver
    (它仅由
    AllowDrop
    设置为
    True
    的元素引发),或者使用一些p/invoke魔术。你可以查看我关于这个主题的问题以及我最终得出的答案:

感谢您的指点,我们在周末阅读了WPF中的装饰。现在阅读文档,如果我在某个地方遇到麻烦,我会带着问题回来。