private void CreateContainers()
        {
            var generator = Owner.ItemContainerGenerator;

            if (Owner.Bounds.Size.IsDefault)
            {
                if ((Items.Count() > 0) && !_estimated)
                {
                    PdmLogger.Log(0, PdmLogger.IndentEnum.In, $"Estimate {Id} Items:{Items} ");
                    var materialized = generator.Materialize(0, Items.ElementAt(0));
                    VirtualizingPanel.Children.Insert(0, materialized.ContainerControl);
                    materialized.ContainerControl.Measure(Size.Infinity);
                    VirtualizingAverages.AddContainerSize(GroupControl.TemplatedParent, Items.ElementAt(0), materialized.ContainerControl);
                    //VirtualizingPanel.Children.RemoveAt(0);
                    //generator.Dematerialize(0, 1);
                    //ItemsPresenter.InvalidateMeasure();
                    _estimated = true;
                    PdmLogger.Log(1, PdmLogger.IndentEnum.Out, $"Estimated {Id} Items:{Items} ");
                }
            }
            else if (Items != null && VirtualizingPanel.IsAttachedToVisualTree)
            {
                _realizedChildren.AddChildren();
            }
            _estimatedSize = VirtualizingAverages.GetEstimatedExtent(GroupControl.TemplatedParent, Items, Vertical);
        }
Esempio n. 2
0
        internal double AddOneChild(RealizedItemsInfo info)
        {
            var child = _generator.ContainerFromIndex(_info.Next);

            if (child == null)
            {
                var materialized = _generator.Materialize(_info.Next, _items.ElementAt(_info.Next));
                child = materialized.ContainerControl;
                _panel.Children.Add(child);
                child.Measure(Size.Infinity);
                PdmLogger.Log(2, PdmLogger.IndentEnum.Nothing, $"Add new Item {child.DataContext} to {this} {_info._currentOffset:0.00}");
                if (VirtualizingAverages.AddContainerSize(_groupControl.TemplatedParent, _items.ElementAt(_info.Next), child))
                {
                    _owner.InvalidateMeasure();
                }
            }
            else
            {
                if (child is GroupItem gi)
                {
                    gi.Presenter?.InvalidateMeasure();
                }
                if (_id == 402)
                {
                }
                child.Measure(Size.Infinity);
                PdmLogger.Log(2, PdmLogger.IndentEnum.Nothing, $"Add old Item {child.DataContext} to {this} {_info._currentOffset:0.00}");
                if (VirtualizingAverages.AddContainerSize(_groupControl.TemplatedParent, _items.ElementAt(_info.Next), child))
                {
                    _owner.InvalidateMeasure();
                }
            }
            return(_info.Vert ? child.DesiredSize.Height : child.DesiredSize.Width);
        }
Esempio n. 3
0
        internal virtual void SetFirst(Vector scrollPos)
        {
            FirstInCache   = VirtualizingAverages.GetStartIndex(_templatedParent, _panelOffset - _cache.GetBackCacheSize(_tempViewport, _tempAverageItem), _items, Vert);
            _firstInView   = VirtualizingAverages.GetStartIndex(_templatedParent, _panelOffset, _items, Vert);
            _currentOffset = VirtualizingAverages.GetOffsetForIndex(_templatedParent, FirstInCache, _items, Vert);
            _numInView     = 0;
            _numInCache    = 0;
            NumInFullView  = 0;
            var av = VirtualizingAverages.GetEstimatedAverage(_templatedParent, _items, Vert);

            _tempAverageItem = Vert ? av.Height : av.Width;
        }
Esempio n. 4
0
        internal override void SetFirst(Vector scrollPos)
        {
            _firstInView = (int)(Vert ? scrollPos.Y : scrollPos.X);
            if (_items is IGroupingView gv)
            {
                _firstInView = gv.GetLocalItemPosition(_firstInView);
            }
            ScrollOffset   = (int)(Vert ? scrollPos.Y : scrollPos.X) - _firstInView;
            _currentOffset = VirtualizingAverages.GetOffsetForIndex(_templatedParent, _firstInView, _items, Vert);
            FirstInCache   = VirtualizingAverages.GetStartIndex(_templatedParent, _currentOffset - _cache.GetBackCacheSize(_tempViewport, _tempAverageItem), _items, Vert);
            _currentOffset = VirtualizingAverages.GetOffsetForIndex(_templatedParent, FirstInCache, _items, Vert);
            _numInView     = 0;
            _numInCache    = 0;
            NumInFullView  = 0;
            var av = VirtualizingAverages.GetEstimatedAverage(_templatedParent, _items, Vert);

            _tempAverageItem = Vert ? av.Height : av.Width;
        }
 public override Size ArrangeOverride(Size finalSize)
 {
     PdmLogger.Log(0, PdmLogger.IndentEnum.In, $"Arrange Realized {_realizedChildren}  {finalSize}  {++_overrideCount}  {Owner.Bounds}");
     foreach (var container in _realizedChildren)
     {
         var control     = container.ContainerControl;
         var startOffset = VirtualizingAverages.GetOffsetForIndex(GroupControl.TemplatedParent, container.Index, Items, Vertical);
         if (Vertical)
         {
             control.Arrange(new Rect(new Point(0, startOffset), new Size(finalSize.Width, control.DesiredSize.Height)));
         }
         else
         {
             control.Arrange(new Rect(new Point(startOffset, 0), new Size(control.DesiredSize.Width, finalSize.Height)));
         }
     }
     Owner.Panel.Arrange(new Rect(finalSize));
     PdmLogger.Log(1, PdmLogger.IndentEnum.Out, $"Arranged Realized {_realizedChildren}  {finalSize}  {_overrideCount}  {Owner.Bounds}");
     return(finalSize);
 }