public static void GetVisibleItems <T>(this IEnumerable <T> items, FrameworkElement viewport, Orientation orientation, out List <T> beforeItems, out List <T> visibleItems, out List <T> afterItems) where T : FrameworkElement { beforeItems = new List <T>(); visibleItems = new List <T>(); afterItems = new List <T>(); ExtensionMethods.VisibleSearchMode visibleSearchMode = ExtensionMethods.VisibleSearchMode.Before; foreach (T obj in items) { switch (visibleSearchMode) { case ExtensionMethods.VisibleSearchMode.Before: if (ExtensionMethods.TestVisibility((FrameworkElement)obj, viewport, orientation, false)) { beforeItems.Add(obj); break; } else { visibleItems.Add(obj); visibleSearchMode = ExtensionMethods.VisibleSearchMode.During; break; } case ExtensionMethods.VisibleSearchMode.During: if (ExtensionMethods.TestVisibility((FrameworkElement)obj, viewport, orientation, true)) { visibleItems.Add(obj); break; } else { afterItems.Add(obj); visibleSearchMode = ExtensionMethods.VisibleSearchMode.After; break; } default: afterItems.Add(obj); break; } } }
public static IEnumerable <T> GetVisibleItems <T>(this IEnumerable <T> items, FrameworkElement viewport, Orientation orientation) where T : FrameworkElement { return(Enumerable.TakeWhile <T>(Enumerable.SkipWhile <T>(items, (Func <T, bool>)(item => ExtensionMethods.TestVisibility((FrameworkElement)item, viewport, orientation, false))), (Func <T, bool>)(item => ExtensionMethods.TestVisibility((FrameworkElement)item, viewport, orientation, true)))); }