Beispiel #1
0
        public override void Arrange(Rectangle target)
        {
            Bounds = RemoveMargin(target);

            var headerSize = GetHeaderSize();
            var childContentSize = Child == null ? Rectangle.Empty : Child.GetMinSize();
            var topContentPadding = Math.Max(headerSize.Height/2, _contentBorder.FixedBorder.Top);

            var contentBorderBounds = new Rectangle(Bounds.X, Bounds.Y + headerSize.Height/2,
                childContentSize.Width + _contentBorder.FixedBorder.Horizontal,
                childContentSize.Height + _contentBorder.FixedBorder.Bottom + topContentPadding);

            var headerBorderBounds = string.IsNullOrEmpty(Title)
                ? contentBorderBounds
                : new Rectangle(contentBorderBounds.X + contentBorderBounds.Width / 2 - headerSize.Width / 2, Bounds.Y, headerSize.Width,
                    headerSize.Height);

            var contentBounds = childContentSize;
            contentBounds.X = contentBorderBounds.X + _contentBorder.FixedBorder.Left;
            contentBounds.Y = contentBorderBounds.Y + topContentPadding;
            
            var merged = Rectangle.Union(contentBorderBounds, headerBorderBounds);
            var arranged = ArrangeToAlignments(Bounds, merged);

            var differenceX = arranged.X - merged.X;
            var differenceY = arranged.Y - merged.Y;

            contentBorderBounds = contentBorderBounds.Translate(differenceX, differenceY);
            contentBounds = contentBounds.Translate(differenceX, differenceY);
            headerBorderBounds = headerBorderBounds.Translate(differenceX, differenceY);

            _contentBorder.SetBounds(contentBorderBounds);
            if (Child != null) Child.Arrange(contentBounds);
            if (!string.IsNullOrEmpty(Title)) _headerBorder.SetBounds(headerBorderBounds);
        }