protected override Size ArrangeOverride(VirtualizingLayoutContext context, Size finalSize) { var realizationRect = context.RealizationRect; int itemCount = context.ItemCount; int firstRealizedIndex = FirstRealizedIndexInRect(realizationRect, itemCount); int lastRealizedIndex = LastRealizedIndexInRect(realizationRect, itemCount); Debug.WriteLine("Arrange:" + realizationRect.ToString()); // Viewport + Buffer Rect. for (int currentIndex = firstRealizedIndex; currentIndex <= lastRealizedIndex; currentIndex++) { var element = context.GetOrCreateElementAt(currentIndex); var arrangeRect = new Rect(0, currentIndex * ItemHeight, ItemWidth, ItemHeight); element.Arrange(arrangeRect); Debug.WriteLine(" Arrange:" + currentIndex + " :" + arrangeRect); } // Anchor var anchorIndex = context.RecommendedAnchorIndex; if (anchorIndex >= 0) { var anchor = context.GetOrCreateElementAt(anchorIndex); var arrangeRect = new Rect(0, anchorIndex * ItemHeight, ItemWidth, ItemHeight); anchor.Arrange(arrangeRect); Debug.WriteLine(" Arrange:" + anchorIndex + " :" + arrangeRect); } return(finalSize); }
protected override Size MeasureOverride(VirtualizingLayoutContext context, Size availableSize) { var realizationRect = context.RealizationRect; int itemCount = context.ItemCount; int firstRealizedIndex = FirstRealizedIndexInRect(realizationRect, itemCount); int lastRealizedIndex = LastRealizedIndexInRect(realizationRect, itemCount); Debug.WriteLine("Measure:" + realizationRect.ToString()); // Viewport + Buffer Rect. for (int currentIndex = firstRealizedIndex; currentIndex <= lastRealizedIndex; currentIndex++) { var element = context.GetOrCreateElementAt(currentIndex); element.Measure(new Size(ItemWidth, ItemHeight)); } // Anchor var anchorIndex = context.RecommendedAnchorIndex; if (anchorIndex >= 0) { var anchorElement = context.GetOrCreateElementAt(anchorIndex); anchorElement.Measure(new Size(ItemWidth, ItemHeight)); } return(new Size(ItemWidth, context.ItemCount * ItemHeight)); }
protected override Size MeasureOverride(VirtualizingLayoutContext context, Size availableSize) { var anchorIndex = context.RecommendedAnchorIndex; SuggestedAnchor = anchorIndex < 0 ? null : context.GetOrCreateElementAt(anchorIndex); return(base.MeasureOverride(context, availableSize)); }
protected override Size ArrangeOverride(VirtualizingLayoutContext context, Size finalSize) { DebugTrace("ArrangeOverride: Viewport" + context.RealizationRect); for (int realizationIndex = 0; realizationIndex < m_realizedElementBounds.Count; realizationIndex++) { int currentDataIndex = m_firstRealizedDataIndex + realizationIndex; DebugTrace("Arranging " + currentDataIndex); // Arrange the child. If any alignment needs to be done, it // can be done here. var child = context.GetOrCreateElementAt(currentDataIndex); var arrangeBounds = m_realizedElementBounds[realizationIndex]; arrangeBounds.X -= m_lastExtent.X; arrangeBounds.Y -= m_lastExtent.Y; child.Arrange(arrangeBounds); } return(finalSize); }
private Size MeasureElement(VirtualizingLayoutContext context, int index, Size availableSize) { var child = context.GetOrCreateElementAt(index); child.Measure(availableSize); int estimationBufferIndex = index % m_estimationBuffer.Count; bool alreadyMeasured = m_estimationBuffer[estimationBufferIndex] != 0; if (!alreadyMeasured) { m_numItemsUsedForEstimation++; } m_totalHeightForEstimation -= m_estimationBuffer[estimationBufferIndex]; m_totalHeightForEstimation += child.DesiredSize.Height; m_estimationBuffer[estimationBufferIndex] = child.DesiredSize.Height; return(child.DesiredSize); }