double GetAverageElementSize( Size availableSize, VirtualizingLayoutContext context, StackLayoutState stackLayoutState) { double averageElementSize = 0; if (context.ItemCount > 0) { if (stackLayoutState.TotalElementsMeasured == 0) { var tmpElement = context.GetOrCreateElementAt(0, ElementRealizationOptions.ForceCreate | ElementRealizationOptions.SuppressAutoRecycle); stackLayoutState.FlowAlgorithm.MeasureElement(tmpElement, 0, availableSize, context); context.RecycleElement(tmpElement); } MUX_ASSERT(stackLayoutState.TotalElementsMeasured > 0); averageElementSize = Math.Round(stackLayoutState.TotalElementSize / stackLayoutState.TotalElementsMeasured); } return(averageElementSize); }
protected internal override void InitializeForContextCore(VirtualizingLayoutContext context) { var state = context.LayoutState; StackLayoutState stackState = default; if (state != null) { stackState = GetAsStackState(state); } if (stackState == null) { if (state != null) { throw new InvalidOperationException("LayoutState must derive from StackLayoutState."); } // Custom deriving layouts could potentially be stateful. // If that is the case, we will just create the base state required by UniformGridLayout ourselves. stackState = new StackLayoutState(); } stackState.InitializeForContext(context, this); }