/// <summary>
 /// remove Object from ContainableObject
 /// </summary>
 /// <param name="iCanContainObject"></param>
 /// <param name="dragObject"></param>
 public static void RemoveObject(this ICanContainObject iCanContainObject, List <IHasTemplate> dragObject)
 {
     foreach (IHasTemplate single in dragObject)
     {
         iCanContainObject.RemoveObject(single);
     }
 }
 /// <summary>
 /// remove Object from ContainableObject
 /// </summary>
 /// <param name="iCanContainObject"></param>
 /// <param name="dragObject"></param>
 public static void RemoveObject(this ICanContainObject iCanContainObject, IHasTemplate dragObject)
 {
     foreach (var single in iCanContainObject.containListTemplate())
     {
         single.Remove(dragObject);
     }
 }
 public static void AddObject(this ICanContainObject iCanContainObject, IHasTemplate drawableObject)
 {
     foreach (var single in iCanContainObject.containListTemplate())
     {
         single.Add(drawableObject);
     }
 }
        public static List <IHasTemplate> ListContainObject(this ICanContainObject iCanContainObject)
        {
            var list = iCanContainObject.Components.Where(n => n is IComponentContainListTemplate);

            return((list.FirstOrDefault() as IComponentContainListTemplate).ListTemplate);

            //(Components.Where(n => n is ICanContainObject<T>).FirstOrDefault() as ICanContainObject<T>).ListContainObject = value;
        }
        private static List <IComponentContainListTemplate> containListTemplate(this ICanContainObject iCanContainObject)
        {
            var listCompare = iCanContainObject.Components.Where(n => n is IComponentContainListTemplate);
            List <IComponentContainListTemplate> listReturn = new List <IComponentContainListTemplate>();

            foreach (var single in listCompare)
            {
                listReturn.Add(single as IComponentContainListTemplate);
            }
            return(listReturn);

            //(Components.Where(n => n is ICanContainObject<T>).FirstOrDefault() as ICanContainObject<T>).ListContainObject = value;
        }