Example #1
0
        public virtual ValueSize MeasureElement <TRenderSize>(IVisualElement element,
                                                              TRenderSize availableSpace)
            where TRenderSize : IRenderSize
        {
            if (!element.IsRequiresMeasure)
            {
                lock (_measureLock)
                {
                    if (_lastMeasurements.TryGetValue(element, out var val))
                    {
                        LayoutQueue.RemoveVisualFromMeasureQueue(element);
                        return(val);
                    }
                }
            }

            // measure anyways if we know nothing of it...?
            //return ValueSize.Empty;

            VisualLineage.PushVisual(element);
            //_styleContext.PushVisual(element);

            var layoutElement = GetElementForLayout(element);

            ////////////////////////
            var res = MeasureElementImpl(layoutElement, availableSpace);

            ////////////////////////

            LayoutQueue.RemoveVisualFromMeasureQueue(element);
            element.AcceptChanges(ChangeType.Measure);
            return(res);
        }