public static IEnumerable <T> CollectElements <T>(this Xamarin.Forms.Element element) where T : Xamarin.Forms.Element { if (element == null) { yield break; } foreach (var child in element.GetChildrenRecursive()) { if (typeof(T).IsAssignableFrom(child.GetType())) { yield return(child as T); } } /*var typ = element.GetType(); * * if (typeof(Cell).IsAssignableFrom(typeof(T))) * callHandler(element as T); * * if (typeof(Cell).IsAssignableFrom(typ)) { * var cell = element as Cell; * if (typeof(ViewCell).IsAssignableFrom(typ)) * CollectElements<T>((cell as ViewCell).View, callHandler); * } else if (typeof(ContentPage).IsAssignableFrom(typ)) { * var page = element as ContentPage; * CollectElements<T>(page.Content, callHandler); * } else if (typeof(Layout<View>).IsAssignableFrom(typ)) { * var layout = element as Layout<View>; * foreach (var child in layout.Children) * CollectElements<T>(child, callHandler); * } else if (typeof(Layout).IsAssignableFrom(typ)) { * var layout = element as Layout; * foreach (var child in layout.Children) * CollectElements<T>(child, callHandler); * } else if (typeof(ITemplatedItemsView<Cell>).IsAssignableFrom(typ)) { * var tiv = element as ITemplatedItemsView<Cell>; * foreach (var cell in tiv.TemplatedItems) * CollectElements<T>(cell, callHandler); * }*/ }