System.Windows.Controls.VirtualizingStackPanel.ArrangeOverride C# (CSharp) Method

ArrangeOverride() protected method

protected ArrangeOverride ( Size finalSize ) : Size
finalSize Size
return Size
		protected override Size ArrangeOverride (Size finalSize)
		{
			/*ItemsControl owner = */ItemsControl.GetItemsOwner (this);
			Size arranged = finalSize;
			
			if (Orientation == Orientation.Vertical)
				arranged.Height = 0;
			else
				arranged.Width = 0;
			
			// Arrange our children
			foreach (UIElement child in Children) {
				Size size = child.DesiredSize;
				
				if (Orientation == Orientation.Vertical) {
					Rect childFinal = new Rect (-HorizontalOffset, arranged.Height, size.Width, size.Height);
					
					if (childFinal.IsEmpty)
						child.Arrange (new Rect ());
					else
						child.Arrange (childFinal);
					
					arranged.Width = Math.Max (arranged.Width, size.Width);
					arranged.Height += size.Height;
				} else {
					Rect childFinal = new Rect (arranged.Width, -VerticalOffset, size.Width, size.Height);
					
					if (childFinal.IsEmpty)
						child.Arrange (new Rect ());
					else
						child.Arrange (childFinal);
					
					arranged.Width += size.Width;
					arranged.Height = Math.Max (arranged.Height, size.Height);
				}
			}
			
			if (Orientation == Orientation.Vertical)
				arranged.Height = Math.Max (arranged.Height, finalSize.Height);
			else
				arranged.Width = Math.Max (arranged.Width, finalSize.Width);
			
			return finalSize;
		}