【问题标题】:WPF TreeView drag items insideWPF TreeView 拖动项目里面
【发布时间】:2020-01-10 13:17:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: wpf drag-and-drop treeview


    【解决方案1】:

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

    如果你想自己实现它,我建议你在这里学习一下 msdn 文档:Drag and Drop Overview。您需要实现Drag-and-Drop Events 部分中列出的事件。

    解决您问题的具体要点:

    • DragOver 事件中实现了关于特定放置目标可以接受作为放置的“规则”。在该事件期间,您将 e.Effects 设置为 None 以指示不允许放置,或设置为其他值之一以指示如何解释放置。
    • 最好使用Adorners 预览被拖动的项目。您可以创建一个在拖动操作期间跟随鼠标的装饰器,甚至可以使用 VisualBrush 使其显示您正在拖动的 UI 元素的图像。
      只要知道像MouseMove这样的普通鼠标事件在拖放操作正在进行时不起作用,所以你必须坚持使用DragOver(它只由AllowDrop设置为@987654333的元素引发@),或者使用一些 p/invoke 魔法。您可以查看我关于这个确切主题的问题以及我最终得出的答案: WPF - Track mouse during Drag & Drop while AllowDrop = False

    【讨论】:

    • 感谢您的指点,在周末阅读了有关 WPF 中的装饰器的信息。现在阅读文档,如果我在某个地方遇到问题,我会提出问题。
    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多