Voici la bonne solution pour le déclenchement de CreateComponentsWithUI au moment du drop (une nouvelle fois grace à Sergey Chub).

L'idée est la suivante : l'opération est initée par l'objet toolbox que vous aurez probablement créé (implémentant IToolboxService). Cet objet sérialize l'objet ToolboxItem selectionné. Il sera ensuite déserialisé par la méthode DeserializeActivitiesFromDataObject de l'objet CompositeActivityDesigner (la cible du Drop). Mais il faut être certain que l'objet sera bien reconnu comme tel. Pour ce faire, une des variante SetData de DataObject permet lors de la sérialisation de spécifier explicitement le type. Il faut donc gérer la sérialisation de la manière suivante :

public object SerializeToolboxItem(ToolboxItem toolboxItem)
{
            DataObject dataObject = new DataObject();
            dataObject.SetData(typeof(ToolboxItem), toolboxItem);
            return dataObject;

}

 

et dans le gestionnaire de l'événement MouseMove de votre Toolbox:

//Start the drag drop when user selects and drags the tool

private void OnListBoxMouseMove(object sender, MouseEventArgs e)

{

            if (e.Button == MouseButtons.Left && this.listBox.SelectedItem != null)

            {

                        SelfHostToolboxItem selectedItem = listBox.SelectedItem as SelfHostToolboxItem;

 

                        if (selectedItem == null || selectedItem.ComponentClass == null)

                                   return;

 

                        ToolboxItem toolboxItem = Toolbox.GetToolboxItem(selectedItem.ComponentClass);

                        IDataObject dataObject = this.SerializeToolboxItem(toolboxItem) as IDataObject;

                        DragDropEffects effects = DoDragDrop(dataObject, DragDropEffects.Copy | DragDropEffects.Move);

            }

}

Plus besoin de contournement, cela marche maintenant comme c’est censé le faire J