/// <summary>
        /// Gets additional feature
        /// </summary>
        /// <typeparam name="T">Feature type</typeparam>
        /// <param name="factory">User interface factory</param>
        /// <param name="obj">Obj</param>
        /// <returns>Feature</returns>
        static public object GetAdditionalFeature <T>(this IUIFactory factory, IAssociatedObject obj)
        {
            IUIFactory f = factory;
            IUIFactory p = factory.Parent;

            if (p != null)
            {
                f = p;
            }
            if (obj == null)
            {
                return(null);
            }
            if (obj is T)
            {
                return(f.GetAdditionalFeature <T>((T)obj));
            }
            if (obj is IChildrenObject) // If object has children
            {
                IAssociatedObject[] ao = (obj as IChildrenObject).Children;
                foreach (IAssociatedObject aa in ao) // Searches additional feature among children
                {
                    object ob = GetAdditionalFeature <T>(f, aa);
                    if (ob != null)
                    {
                        return(ob);
                    }
                }
            }
            return(null);
        }