예제 #1
0
        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);
            }
        }
예제 #2
0
        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();
        }