コード例 #1
0
        protected override Size ArrangeOverride(Size finalSize)
        {
            if (GridControl.ShowBorder)
            {
                var halfBorderLineThickness = GridControl.BorderThickness / 2.0;
                GridBorderLines[0].StartPoint = new Point(0.0, halfBorderLineThickness);
                GridBorderLines[0].EndPoint   = new Point(finalSize.Width, halfBorderLineThickness);
                GridBorderLines[1].StartPoint = new Point(0.0, finalSize.Height - halfBorderLineThickness);
                GridBorderLines[1].EndPoint   = new Point(finalSize.Width, finalSize.Height - halfBorderLineThickness);
                GridBorderLines[2].StartPoint = new Point(halfBorderLineThickness, 0.0);
                GridBorderLines[2].EndPoint   = new Point(halfBorderLineThickness, finalSize.Height);
                GridBorderLines[3].StartPoint = new Point(finalSize.Width - halfBorderLineThickness, 0.0);
                GridBorderLines[3].EndPoint   = new Point(finalSize.Width - halfBorderLineThickness, finalSize.Height);
            }
            foreach (var borderLine in GridBorderLines)
            {
                borderLine.IsVisible = GridControl.ShowBorder;
            }

            double columnHeadersHeight = ColumnHeaders.Max(ch => ch.DesiredSize.Height) + GridControl.HorizontalLinesThickness;
            double borderThickness     = GridControl.ShowBorder ? GridControl.BorderThickness : 0.0;
            double horizontalLineY     = borderThickness + columnHeadersHeight - GridControl.HorizontalLinesThickness / 2.0;

            HorizontalHeaderLine.StartPoint = new Point(borderThickness, horizontalLineY);
            HorizontalHeaderLine.EndPoint   = new Point(finalSize.Width - borderThickness, horizontalLineY);
            double columnHeadersWidth = borderThickness;

            for (int i = 0; i < ColumnHeaders.Count; i++)
            {
                var columnHeader = ColumnHeaders[i];
                columnHeader.Arrange(new Rect(columnHeadersWidth, borderThickness, columnHeader.Column.Width, columnHeadersHeight));
                columnHeadersWidth += columnHeader.Column.Width + GridControl.VerticalLinesThickness;
                double verticalLineX = columnHeadersWidth - GridControl.VerticalLinesThickness / 2.0;
                ColumnHeaderLines[i].StartPoint = new Point(verticalLineX, borderThickness);
                ColumnHeaderLines[i].EndPoint   = new Point(verticalLineX, columnHeadersHeight + borderThickness);
            }

            CellsPanel.Arrange(new Rect(borderThickness, borderThickness + columnHeadersHeight,
                                        finalSize.Width - 2.0 * borderThickness, finalSize.Height - 2.0 * borderThickness - columnHeadersHeight));

            return(finalSize);
        }