protected override void ArrangeBorder(RectangleF finalRect) { float headerLabelHeight = _headerLabel.DesiredSize.Height; float halfLabelHeight = headerLabelHeight / 2; float halfThickness = (float)BorderThickness / 2; float insetY = (float)Math.Max(halfThickness, halfLabelHeight) - halfThickness; RectangleF borderRect = new RectangleF(finalRect.X, finalRect.Y + insetY, finalRect.Width, finalRect.Height - insetY); base.ArrangeBorder(borderRect); const float realHeaderInset = HEADER_INSET_LINE + HEADER_INSET_SPACE; float borderInsetX = GetBorderCornerInsetX(); _headerLabelRect = new RectangleF( finalRect.X + borderInsetX + realHeaderInset, finalRect.Y, finalRect.Width - (borderInsetX + realHeaderInset) * 2, headerLabelHeight); if (_headerLabelRect.Width < 0) { _headerLabelRect.Width = 0; } if (_headerLabelRect.Height > finalRect.Height) { _headerLabelRect.Height = finalRect.Height; } _headerLabel.Arrange(_headerLabelRect); }