public UIElement Step() { UIElement result = null; if (collection != null) { UIElementCollection uiecollection = null; int count = GetCount(); if (count < 0 || index >= count) { return(null); } if (count == 1 && index == 0) { index++; return((UIElement)collection[0]); } if (direction == VisualTreeWalkerDirection.ZForward || direction == VisualTreeWalkerDirection.ZReverse) { uiecollection = (UIElementCollection)collection; if (uiecollection.z_sorted.Count != count) { #if SANITY printf("VisualTreeWalker: unexpectedly got an unsorted UIElementCollection\n"); #endif uiecollection.ResortByZIndex(); } } switch (direction) { case VisualTreeWalkerDirection.ZForward: result = (UIElement)uiecollection.z_sorted[index]; break; case VisualTreeWalkerDirection.ZReverse: result = (UIElement)uiecollection.z_sorted[count - (index + 1)]; break; case VisualTreeWalkerDirection.Logical: { result = (UIElement)collection[index]; break; } case VisualTreeWalkerDirection.LogicalReverse: { result = (UIElement)collection[(count - (index + 1))]; break; } } index++; } else { if (index == 0) { index++; result = (UIElement)content; } else { result = null; } } return(result); }