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);
                }
            }