Ejemplo n.º 1
0
        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);
             * }*/
        }