/// <summary> /// Gets the items that are currently in the viewport /// of a LongListSelector and adds them /// into a list of weak references. /// </summary> /// <param name="list"> /// The LongListSelector instance to search on. /// </param> /// <param name="items"> /// The list of weak references where the items in /// the viewport will be added. /// </param> public static void GetItemsInViewPort(LongListSelector list, IList<WeakReference> items) { DependencyObject child = list; if (VisualTreeHelper.GetChildrenCount(list) == 0) { // no child yet return; } list.UpdateLayout(); do { child = VisualTreeHelper.GetChild(child, 0); } while (VisualTreeHelper.GetChildrenCount(child) > 0 && !(child is Canvas)); if (child is Canvas && VisualTreeHelper.GetChildrenCount(child) > 0 && VisualTreeHelper.GetChild(child, 0) is Canvas) { Canvas headersPanel = (Canvas)child; Canvas itemsPanel = (Canvas)VisualTreeHelper.GetChild(child, 0); var itemsInList = new List<KeyValuePair<double, FrameworkElement>>(); AddVisibileContainers(list, itemsPanel, itemsInList, /* selectContent = */ false); AddVisibileContainers(list, headersPanel, itemsInList, /* selectContent = */ true); foreach (var pair in itemsInList.OrderBy(selector => selector.Key)) { items.Add(new WeakReference(pair.Value)); } } }
/// <summary> /// Gets the items that are currently in the viewport /// of a LongListSelector and adds them /// into a list of weak references. /// </summary> /// <param name="list"> /// The LongListSelector instance to search on. /// </param> /// <param name="items"> /// The list of weak references where the items in /// the viewport will be added. /// </param> public static void GetItemsInViewPort(LongListSelector list, IList <WeakReference> items) { DependencyObject child = list; if (VisualTreeHelper.GetChildrenCount(list) == 0) { // no child yet return; } list.UpdateLayout(); do { child = VisualTreeHelper.GetChild(child, 0); } while (VisualTreeHelper.GetChildrenCount(child) > 0 && !(child is Canvas)); if (child is Canvas && VisualTreeHelper.GetChildrenCount(child) > 0 && VisualTreeHelper.GetChild(child, 0) is Canvas) { Canvas headersPanel = (Canvas)child; Canvas itemsPanel = (Canvas)VisualTreeHelper.GetChild(child, 0); var itemsInList = new List <KeyValuePair <double, FrameworkElement> >(); AddVisibileContainers(list, itemsPanel, itemsInList, /* selectContent = */ false); AddVisibileContainers(list, headersPanel, itemsInList, /* selectContent = */ true); foreach (var pair in itemsInList.OrderBy(selector => selector.Key)) { items.Add(new WeakReference(pair.Value)); } } }
/// <summary> /// Gets the items that are currently in the viewport of a /// <see cref="T:LongListSelector" /> and adds them into a list of weak references. /// </summary> /// <param name="list"> /// The LongListSelector instance to search on. /// </param> /// <param name="items"> /// The list of weak references where the items in /// the viewport will be added. /// </param> public static void GetItemsInViewPort(this LongListSelector list, IList <WeakReference> items) { DependencyObject child = list; int childCount; childCount = VisualTreeHelper.GetChildrenCount(list); if (childCount == 0) { // no child yet return; } list.UpdateLayout(); Canvas headersPanel; do { child = VisualTreeHelper.GetChild(child, 0); childCount = VisualTreeHelper.GetChildrenCount(child); headersPanel = child as Canvas; } while ((headersPanel == null) && childCount > 0); if (headersPanel != null && childCount > 0) { Canvas itemsPanel = VisualTreeHelper.GetChild(headersPanel, 0) as Canvas; if (itemsPanel != null) { var itemsInList = new List <KeyValuePair <double, FrameworkElement> >(); AddVisibileContainers(list, itemsPanel, itemsInList, /* selectContent = */ false); AddVisibileContainers(list, headersPanel, itemsInList, /* selectContent = */ true); foreach (var pair in itemsInList.OrderBy(selector => selector.Key)) { items.Add(new WeakReference(pair.Value)); } } } }