Перетаскивание в WPF ToolWindow в расширении VS2010 не разрешено

У меня тут странная проблема. Я создал простой подключаемый модуль с помощью мастера для проекта Visual Studio Integration Package/VSIX с окном инструментов. В этом окне я хочу сделать простое перетаскивание из списка и вставить его в одно и то же окно. Я сделал то же самое в обычной программе WPF, но когда я делаю это в окне инструментов WS, это не разрешено. Я запускаю операцию перетаскивания (инициированную событием PreviewMouseLeftButtonDown) и вызываю метод DragDrop.DoDragDrop(), я сразу получаю курсор со знаком остановки. Перетаскивание запрещено.

Любые идеи? Ограничения безопасности или влияние того факта, что эти элементы управления WPF размещены внутри ToolWindowPane и старого COM-материала Visual Studio IDE, я думаю... Спасибо за любую помощь!


person Johan Danforth    schedule 28.01.2010    source источник


Ответы (1)


Алин Константин из Microsoft помог мне здесь и даже написал сообщение в блоге о том, как правильно выполнять перетаскивание в VS2010!

http://alinconstantin.blogspot.com/2010/02/drag-and-drop-in-visual-studio-2010.html


Основные моменты, в случае гниения ссылки:

В окне инструментов (UserControl) переопределите OnDragEnter, OnDragOver (важно!) и OnDrop. Неспособность переопределить OnDragOver приведет к сбою перетаскивания.

В OnDragEnter сделайте следующее:

  1. Проверьте, сможете ли вы справиться с падением
  2. Если это так, установите DragEventArgs.Handled на true и DragEventArgs.Effects на соответствующее значение.
  3. Звоните base.OnDragEnter()

В OnDragOver вы должны сделать то же самое, что и OnDragEnter. Если вы не установите Handled, Visual Studio вступит во владение, и вы не сможете справиться с удалением!

In OnDrop,

  1. Справиться с падением
  2. Установите DragEventArgs.Handled на true
  3. Звоните base.OnDrop()

Помните, что отсутствие обработки OnDragOver приведет к тому, что Visual Studio возьмет на себя операцию перетаскивания, лишив вас возможности обрабатывать ее в OnDrop.

person Johan Danforth    schedule 05.02.2010