Word: How to do “Drag and Drop” of Content controls from Task Pane to the document

  1. Create a Word VSTO application level project for Word using Visual Studio 2008/2005 (For VS 2005, you need to install VSTO SE). To do that, go to File Menu in VS -->New-->Project-->Expand Office hive-->Select Word 2007 Add-in

  2. Add a user control item (Name it as CTP.cs) to the project and insert a List box (Name it as, lstItems). To add a user control to the project, go to Project Menu-->Add User Control-->Name it as CTP.cs

  3. Add the code snippet below in the ThisAddIn_Startup event (You will see this when you view the code for ThisAddin.cs).  This will add our custom task pane while loading Word

             Microsoft.Office.Tools.CustomTaskPane WCTP; 
             private void ThisAddIn_Startup(object sender, System.EventArgs e)
                //To add our CTP to the Custom Task panes collection of Word. We need to set the Visible property to true, otherwise, by
                //default it is false
     WCTP = (Microsoft.Office.Tools.CustomTaskPane)this.CustomTaskPanes.Add(new CTP(), "Do Drag Drop");
                 WCTP.Visible = true;
  4. The code snippet that we need to have in the user control class is as below,

     using System;
     using System.Collections.Generic;
     using System.ComponentModel;
     using System.Drawing;
     using System.Data;
     using System.Linq;
     using System.Text;
     using System.Windows.Forms;
     using Word = Microsoft.Office.Interop.Word;
     namespace DragDrop_ContentControls
         public partial class CTP : UserControl
             public CTP()
             object missing = System.Type.Missing;
             private Rectangle dragBoxFromMouseDown;
             private void lstItems_MouseDown(object sender, MouseEventArgs e)
                     // Remember the point where the mouse down occurred. The DragSize indicates
                     // the size that the mouse can move before a drag event should be started.                
                     Size dragSize = SystemInformation.DragSize;
                     // Create a rectangle using the DragSize, with the mouse position being
                     // at the center of the rectangle.
                     dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2),
                                                                    e.Y - (dragSize.Height / 2)), dragSize); 
             private void lstItems_MouseMove(object sender, MouseEventArgs e)
                                                                     //To check if the Mouse left button is clicked
     if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
                     // If the mouse moves outside the rectangle, start the drag.
                     if (dragBoxFromMouseDown != Rectangle.Empty &&
                         !dragBoxFromMouseDown.Contains(e.X, e.Y))
                                 //Start Drag Drop
                                 DoDragDrop("", DragDropEffects.All);
                                 Word.ContentControl cntCtrl;
                                 //Insert Content Control at the selected range
                                 cntCtrl = Globals.ThisAddIn.Application.Selection.Range.ContentControls.Add(Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlText, ref missing);
                                 cntCtrl.Range.Text = lstItems.Text; //This is how we set the value to be to populated in the content controls
                                 //To set the XPath for custom XML binding for content controls. This is optional
                                 string xPath = @"Root\" + lstItems.Text.Replace(" ", "_");
                                 cntCtrl.XMLMapping.SetMapping(xPath, "", null); //This is required when you want to bind to a custom XML part
             private void lstItems_MouseUp(object sender, MouseEventArgs e)
                 // Reset the drag rectangle when the mouse button is raised.
                 dragBoxFromMouseDown = Rectangle.Empty;
  5. Build the application and Run it to launch Word

  6. When you drag an item from List box in the Task Pane onto the document surface, you will see a content control being added with the caption of the list item name