private void ArrangeContentPresenter(FrameworkElement element, ColumnDefinition contentColumn, RowDefinition contentRow) { element.ApplyGridPosition(); Grid.SetColumn(element, ItemsHost.ColumnDefinitions.IndexOf(contentColumn)); Grid.SetRow(element, ItemsHost.RowDefinitions.IndexOf(contentRow)); if (ReferenceEquals(element, ContentPresenter)) { _childrenDefinitions[element] = new UIChildDefinition(contentColumn, contentRow); } }
protected internal override void ArrangeItems() { if (TemplateContract.IsAttached == false) { return; } _childrenDefinitions.Clear(); ItemsHost.Children.Clear(); ItemsHost.Children.Add(ContentPresenter); var leftCol = 0; var rightCol = ItemsHost.ColumnDefinitions.Count - 1; var topRow = 0; var bottomRow = ItemsHost.RowDefinitions.Count - 1; foreach (var item in ReverseOrderedItems) { var splitter = _itemSplitterDictionary[item]; ItemsHost.Children.Add(item); ItemsHost.Children.Add(splitter); var colIndex = leftCol; var rowIndex = topRow; var splitColIndex = leftCol; var splitRowIndex = topRow; var colSpan = 1; var rowSpan = 1; switch (DockLayout.GetDockSide(item)) { case Dock.Left: colIndex = leftCol; splitColIndex = leftCol + 1; leftCol += 2; break; case Dock.Top: rowIndex = topRow; splitRowIndex = topRow + 1; topRow += 2; break; case Dock.Right: colIndex = rightCol; splitColIndex = rightCol - 1; rightCol -= 2; break; case Dock.Bottom: rowIndex = bottomRow; splitRowIndex = bottomRow - 1; bottomRow -= 2; break; } switch (GetOrientation(item)) { case Orientation.Horizontal: rowSpan = bottomRow - topRow + 1; SetResizeDirection(splitter, GridResizeDirection.Columns); ItemsHost.ColumnDefinitions[splitColIndex].Width = GridLength.Auto; _childrenDefinitions[splitter] = new UIChildDefinition(ItemsHost.ColumnDefinitions[splitColIndex], null); _childrenDefinitions[item] = new UIChildDefinition(ItemsHost.ColumnDefinitions[colIndex], null); break; case Orientation.Vertical: colSpan = rightCol - leftCol + 1; SetResizeDirection(splitter, GridResizeDirection.Rows); ItemsHost.RowDefinitions[splitRowIndex].Height = GridLength.Auto; _childrenDefinitions[splitter] = new UIChildDefinition(null, ItemsHost.RowDefinitions[splitRowIndex]); _childrenDefinitions[item] = new UIChildDefinition(null, ItemsHost.RowDefinitions[rowIndex]); break; } SetDefinitionSize(item); Grid.SetColumn(item, colIndex); Grid.SetColumnSpan(item, colSpan); Grid.SetRow(item, rowIndex); Grid.SetRowSpan(item, rowSpan); Grid.SetColumn(splitter, splitColIndex); Grid.SetColumnSpan(splitter, colSpan); Grid.SetRow(splitter, splitRowIndex); Grid.SetRowSpan(splitter, rowSpan); } var contentColumn = ItemsHost.ColumnDefinitions[leftCol]; var contentRow = ItemsHost.RowDefinitions[topRow]; _contentDefinition = new UIChildDefinition(contentColumn, contentRow); ArrangeContentPresenter(ContentPresenter, contentColumn, contentRow); UpdateContentDefinitionsSize(); }