如何在VSPackage ToolWindow中启用拖放操作?

时间:2011-06-27 18:49:39

标签: c# wpf drag-and-drop vs-extensibility vspackage

我有一个WPF用户控件,可在该控件中提供拖放功能。当用户控件托管在WPF应用程序中时,一切正常。但是,如果将其托管在VSPackage ToolWindow内,则会完全禁用丢弃。

在这种特殊情况下,我试图将可拖动列表框中的选定项目(下图左侧)拖动到右侧的画布上。

enter image description here

可以使用DoDragDrop启动拖动,例如:

    protected override void OnMouseMove(MouseEventArgs e)
    {
        base.OnMouseMove(e);
        if (e.LeftButton != MouseButtonState.Pressed)
            dragStartPoint = null;

        if (dragStartPoint.HasValue)
        {
            DragDrop.DoDragDrop(this, Content, DragDropEffects.Copy);
            e.Handled = true;
        }
    }

但是在工具窗口的任何地方都不允许掉线。

什么样的条件会阻止工具窗口内的拖放,以及启用它需要进行哪些设置更改?

1 个答案:

答案 0 :(得分:1)

答案在Alin Constantin's Blog中找到,并在MSDN上由用户Notre指出。我需要处理所有拖放相关的事件,以便VS shell不会拦截它们。就我而言,我需要处理DragOver控件中的Canvas事件:

    protected override void OnDragOver(DragEventArgs e)
    {
        base.OnDragOver(e);
        e.Handled = true;
    }