private RearrangeItemInfo[] BuildRearrangeMap2(RearrangeItemInfo[] map,
int viewFirstIndex, int viewLastIndex)
{
RearrangeItemInfo[] map2 = new RearrangeItemInfo[this.Items.Count];
for (int i = 0; i < map2.Length; i++)
{
object item = this.Items[i];
// Try to find the same item in the pre-rearrange info.
RearrangeItemInfo info = map.FirstOrDefault(rii => rii.ToIndex < 0 && rii.Item == item);
if (info == null)
{
info = new RearrangeItemInfo()
{
Item = item,
};
}
info.ToIndex = i;
// The precise item location is only important if it's within the view.
if (viewFirstIndex <= i && i <= viewLastIndex)
{
ReorderListBoxItem itemContainer = (ReorderListBoxItem)
this.ItemContainerGenerator.ContainerFromIndex(i);
if (itemContainer != null)
{
GeneralTransform itemTransform = itemContainer.TransformToVisual(this.rearrangeCanvas);
Point itemPoint = itemTransform.Transform(new Point(0, 0));
info.ToY = itemPoint.Y;
info.Height = itemContainer.RenderSize.Height;
}
}
map2[i] = info;
}
return map2;
}