/// <summary>
        /// 配下の要素とその親の参照をタプルで返す
        /// </summary>
        /// <param name="recursive">再帰的に探索するか</param>
        /// <returns></returns>
        public IEnumerable <Tuple <DraggableComponentModel, DraggableComponentModelList> > EnumAllModelListPairs(bool recursive)
        {
            foreach (DraggableComponentModel item in Models)
            {
                yield return(new Tuple <DraggableComponentModel, DraggableComponentModelList>(item, Models));

                if (recursive)
                {
                    ContainerComponentModel container = item as ContainerComponentModel;
                    if (container != null)
                    {
                        foreach (var child in container.EnumAllModelListPairs(recursive))
                        {
                            yield return(child);
                        }
                    }

                    TableComponentModel tabeModel = item as TableComponentModel;
                    if (tabeModel != null)
                    {
                        foreach (var child in tabeModel.EnumAllModelListPairs(recursive))
                        {
                            yield return(child);
                        }
                    }
                }
            }
        }
        public override DraggableComponentModel Clone()
        {
            ContainerComponentModel clone = this.MemberwiseClone() as ContainerComponentModel;

            clone.Models = new DraggableComponentModelList();
            clone.Models.AddRange(this.Models.Select(model => model.Clone()));
            clone.ID   = $"component{ComponentIdNumber}-{clone.ModelType.Name()}";
            clone.Name = clone.ID;
            ComponentIdNumber++;
            return(clone);
        }