public static MoveStrategyContext FromSelection(ToolBehavior toolBehavior, SceneElement primarySelection, IList <SceneElement> selectedElements, IList <BaseFrameworkElement> draggedElements, Vector duplicationOffset, Point referencePoint)
        {
            MoveStrategyContext moveStrategyContext = new MoveStrategyContext();

            moveStrategyContext.ToolBehaviorContext = toolBehavior.ToolBehaviorContext;
            moveStrategyContext.Transaction         = (IToolBehaviorTransaction)toolBehavior;
            moveStrategyContext.MouseDevice         = toolBehavior.MouseDevice;
            moveStrategyContext.PrimarySelection    = primarySelection;
            moveStrategyContext.SelectedElements    = new ReadOnlyCollection <SceneElement>(selectedElements ?? (IList <SceneElement>) new List <SceneElement>());
            moveStrategyContext.DraggedElements     = new ReadOnlyCollection <BaseFrameworkElement>(draggedElements ?? (IList <BaseFrameworkElement>) new List <BaseFrameworkElement>());
            moveStrategyContext.DuplicationOffset   = duplicationOffset;
            moveStrategyContext.SnapshotDraggedElements(moveStrategyContext.ActiveView, referencePoint);
            return(moveStrategyContext);
        }