public Size MeasureElement( ILayoutable element, int index, Size availableSize, VirtualizingLayoutContext context) { var measureSize = _algorithmCallbacks.Algorithm_GetMeasureSize(index, availableSize, context); element.Measure(measureSize); var provisionalArrangeSize = _algorithmCallbacks.Algorithm_GetProvisionalArrangeSize(index, measureSize, element.DesiredSize, context); _algorithmCallbacks.Algorithm_OnElementMeasured(element, index, availableSize, measureSize, element.DesiredSize, provisionalArrangeSize, context); return provisionalArrangeSize; }
void MakeAnchor( VirtualizingLayoutContext context, int index, Size availableSize) { m_elementManager.ClearRealizedRange(); // FlowLayout requires that the anchor is the first element in the row. var internalAnchor = m_algorithmCallbacks.Algorithm_GetAnchorForTargetElement(index, availableSize, context); global::System.Diagnostics.Debug.Assert(internalAnchor.Index <= index); // No need to set the position of the anchor. // (0,0) is fine for now since the extent can // grow in any direction. for (int dataIndex = internalAnchor.Index; dataIndex < index + 1; ++dataIndex) { var element = context.GetOrCreateElementAt(dataIndex, ElementRealizationOptions.ForceCreate | ElementRealizationOptions.SuppressAutoRecycle); element.Measure(m_algorithmCallbacks.Algorithm_GetMeasureSize(dataIndex, availableSize, context)); m_elementManager.Add(element, dataIndex); } }