private void MeasureTrailing() { var constraint = OrientedConstraint.Size; var index = LastVisibleIndex + 1; var realizedIndex = index; while (index < SourceCount && TrailingCacheCount <= Layout.Panel.LeadingTrailingLimit) { var element = Realize(index); if (element == null) { index++; continue; } realizedIndex = index; AddItem(element); Layout.MeasureChild(element, constraint); OrientedTrailingSize = OrientedTrailingSize.StackSize(element.DesiredSize); index++; TrailingCacheCount++; } LastIndex = realizedIndex; }
private void MeasureFocusedItem(int focusedIndex) { if (focusedIndex < 0 || focusedIndex >= SourceCount) { return; } if (focusedIndex >= FirstIndex && focusedIndex <= LastIndex) { return; } var focusedItem = Realize(focusedIndex); if (focusedItem == null) { return; } if (focusedIndex < FirstIndex) { InsertItem(0, focusedItem); Layout.MeasureChild(focusedItem, OrientedConstraint.Size); OrientedLeadingSize = OrientedLeadingSize.StackSize(focusedItem.DesiredSize); } else { AddItem(focusedItem); Layout.MeasureChild(focusedItem, OrientedConstraint.Size); OrientedTrailingSize = OrientedTrailingSize.StackSize(focusedItem.DesiredSize); } }