private RearrangeItemInfo[] BuildRearrangeMap(int viewFirstIndex, int viewLastIndex)
{
RearrangeItemInfo[] map = new RearrangeItemInfo[this.Items.Count];
for (int i = 0; i < map.Length; i++)
{
object item = this.Items[i];
RearrangeItemInfo info = new RearrangeItemInfo()
{
Item = item,
FromIndex = 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.FromY = itemPoint.Y;
info.Height = itemContainer.RenderSize.Height;
}
}
map[i] = info;
}
return map;
}