protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (e.LeftButton != MouseButtonState.Pressed) this.dragStartPoint = null; if (this.dragStartPoint.HasValue) { // XamlWriter.Save() has limitations in exactly what is serialized, // see SDK documentation; short term solution only; string xamlString = XamlWriter.Save(this.Content); DragObject dataObject = new DragObject(); dataObject.Xaml = xamlString; WrapPanel panel = VisualTreeHelper.GetParent(this) as WrapPanel; if (panel != null) { // desired size for DesignerCanvas is the stretched Toolbox item size double hscale = 1.4; double vscale = 0.7; dataObject.DesiredSize = new Size(panel.ItemWidth * hscale, panel.ItemHeight * vscale); } DragDrop.DoDragDrop(this, dataObject, DragDropEffects.Copy); e.Handled = true; } }