2010-01-28 5 views
3

J'ai un étrange problème ici. J'ai créé un simple plugin en utilisant l'assistant pour un projet Visual Studio Integration Package/VSIX avec une fenêtre d'outils. Dans cette fenêtre, je veux faire un simple glisser/déposer à partir d'une liste et déposer dans la même fenêtre. J'ai fait la même chose dans un programme WPF normal, mais quand je le fais dans une fenêtre d'outils WS, ce n'est pas autorisé. Je commence l'opération glisser/déposer (initiée par un événement PreviewMouseLeftButtonDown) et appelle la méthode DragDrop.DoDragDrop(), j'obtiens le curseur stop-sign à la fois. Aucun glissement autorisé.Glisser Drop dans WPF ToolWindow dans VS2010 Extension non autorisé

Des idées? Les restrictions de sécurité ou un effet du fait que ces contrôles WPF sont hébergés dans un ToolWindowPane et de vieilles choses Visual Studio IDE COM je suppose ... Merci pour toute aide!

+0

La même chose vient de me frapper. – Will

Répondre

5

Alin Constantin chez Microsoft m'a aidé ici et a même écrit un billet de blog sur la façon de faire glisser/déposer dans VS2010 correctement!

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


Faits saillants, en cas de lien pourriture:

Dans la fenêtre d'outil (UserControl), passer outre OnDragEnter, OnDragOver (importante!) Et OnDrop. Si vous ne remplacez pas OnDragOver, le glisser-déposer échouera.

En OnDragEnter, procédez comme suit:

  1. Vérifiez si vous pouvez gérer la chute
  2. Si, réglez DragEventArgs.Handled à true et DragEventArgs.Effects à la valeur appropriée
  3. Appel base.OnDragEnter()

Dans OnDragOver, vous devez faire le même chose comme OnDragEnter. Si vous ne parvenez pas à définir Handled, Visual Studio prendra le relais et vous ne serez pas en mesure de gérer la baisse!

En OnDrop,

  1. Poignée de la chute
  2. Set DragEventArgs.Handled à true
  3. Appel base.OnDrop()

Rappelez-vous, la manipulation ne OnDragOver entraînera Visual Studio la prise en charge l'opération de déplacement, vous refusant la possibilité de gérer dans OnDrop.