internal static DataObject DoDragMoveImpl(IEnumerable <WorkflowViewElement> draggedViewElements, Point referencePoint)
        {
            List <ModelItem>    draggedModelItems = new List <ModelItem>();
            bool                first             = true;
            WorkflowViewElement viewElement       = null;

            foreach (WorkflowViewElement view in draggedViewElements)
            {
                if (view != null)
                {
                    if (first)
                    {
                        viewElement = view;
                        first       = false;
                    }
                    draggedModelItems.Add(view.ModelItem);
                    view.IsHitTestVisible = false;
                }
            }
            DataObject dataObject = new DataObject(ModelItemsDataFormat, draggedModelItems);

            // For compatiblity
            if (viewElement != null)
            {
                dataObject.SetData(ModelItemDataFormat, viewElement.ModelItem);
                dataObject.SetData(CompositeViewFormat, GetCompositeView(viewElement));
            }

            dataObject.SetData(DragAnchorPointFormat, referencePoint);

            if (viewElement != null)
            {
                DesignerView          designerView = viewElement.Context.Services.GetService <DesignerView>();
                ViewElementDragShadow dragShadow   = new ViewElementDragShadow(designerView.scrollableContent, draggedViewElements, referencePoint, designerView.ZoomFactor);
                designerView.BeginDragShadowTracking(dragShadow);
                //whenever drag drop fails - ensure getting rid of drag shadow
                try
                {
                    DragDrop.DoDragDrop(designerView, dataObject, DragDropEffects.Move | DragDropEffects.Copy | DragDropEffects.Scroll | DragDropEffects.Link);
                }
                catch
                {
                    //let the caller handle exception
                    throw;
                }
                finally
                {
                    designerView.EndDragShadowTracking(dragShadow);
                    foreach (WorkflowViewElement view in draggedViewElements)
                    {
                        if (view != null)
                        {
                            view.IsHitTestVisible = true;
                        }
                    }
                }
            }
            return(dataObject);
        }
        public static DragDropEffects DoDragMove(WorkflowViewElement draggedViewElement, Point referencePoint)
        {
            if (draggedViewElement == null)
            {
                throw FxTrace.Exception.ArgumentNull("draggedViewElement");
            }
            if (referencePoint == null)
            {
                throw FxTrace.Exception.ArgumentNull("referencePoint");
            }
            ModelItem  draggedActivityModelItem = draggedViewElement.ModelItem;
            DataObject dataObject = new DataObject(ModelItemDataFormat, draggedActivityModelItem);

            dataObject.SetData(CompositeViewFormat, GetCompositeView(draggedViewElement));
            dataObject.SetData(DragAnchorPointFormat, referencePoint);
            List <ModelItem> draggedModelItems = new List <ModelItem>();

            draggedModelItems.Add(draggedActivityModelItem);
            dataObject.SetData(ModelItemsDataFormat, draggedModelItems);

            DesignerView          view       = draggedViewElement.Context.Services.GetService <DesignerView>();
            ViewElementDragShadow dragShadow = new ViewElementDragShadow(view.scrollableContent, draggedViewElement, referencePoint, view.ZoomFactor);

            draggedViewElement.IsHitTestVisible = false;
            view.BeginDragShadowTracking(dragShadow);

            //whenever drag drop fails - ensure getting rid of drag shadow
            try
            {
                DragDrop.DoDragDrop(GetCompositeView(draggedViewElement), dataObject, DragDropEffects.Move | DragDropEffects.Copy | DragDropEffects.Scroll | DragDropEffects.Link);
            }
            catch
            {
                //let the caller handle exception
                throw;
            }
            finally
            {
                view.EndDragShadowTracking(dragShadow);
                draggedViewElement.IsHitTestVisible = true;
            }

            return(GetDragDropCompletedEffects(dataObject));
        }