/// <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); }