我这里有一个奇怪的问题。我使用向导创建了一个简单的插件,用于带有工具窗口的Visual Studio集成包/ VSIX项目。在该窗口中,我想从列表框中进行简单的拖放操作并放在同一窗口中。我在普通的WPF程序中做了同样的事情,但是当我在WS工具窗口中执行此操作时,它是不允许的。我开始拖放操作(由PreviewMouseLeftButtonDown
事件启动)并调用DragDrop.DoDragDrop()
方法,我立刻得到了stop-sign-cursor。不允许拖动。
有什么想法吗?安全限制或这些WPF控件托管在ToolWindowPane和旧的Visual Studio IDE COM中的事实的影响我猜...感谢任何帮助!
答案 0 :(得分:6)
微软的Alin Constantin在这里帮助我,甚至写了一篇关于如何在VS2010中正确拖放的博客文章!
http://alinconstantin.blogspot.com/2010/02/drag-and-drop-in-visual-studio-2010.html
如果链接腐烂,请注意:
在您的工具窗口(UserControl)中,覆盖OnDragEnter
,OnDragOver
(重要!)和OnDrop
。未能覆盖OnDragOver
将导致拖放失败。
在OnDragEnter
中,执行以下操作:
DragEventArgs.Handled
设为true
,将DragEventArgs.Effects
设为适当的值base.OnDragEnter()
在OnDragOver
中,您必须与OnDragEnter
执行相同的操作。如果您未能设置Handled
,Visual Studio将接管并且您将无法处理掉线!
在OnDrop
,
DragEventArgs.Handled
设为true
base.OnDrop()
请记住,不处理OnDragOver
将导致Visual Studio接管拖动操作,从而使您无法在OnDrop
中处理它。