public override void OnDraw(Graphics g) { base.OnDraw(g); //draw rectangle DrawImage.DrawImageOnRect(g, getBackImage()); if (_items != null) { DrawingPage.VerifyDrawingOrder(_items, false); GraphicsState gs = g.Save(); if (RotateAngle != 0) { double angle = (RotateAngle / 180) * Math.PI; Rectangle rc = this.Rectangle; g.TranslateTransform( (rc.Width + (float)(rc.Height * Math.Sin(angle)) - (float)(rc.Width * Math.Cos(angle))) / 2 + rc.X, (rc.Height - (float)(rc.Height * Math.Cos(angle)) - (float)(rc.Width * Math.Sin(angle))) / 2 + rc.Y); g.RotateTransform((float)RotateAngle); } else { g.TranslateTransform((float)(this.Left), (float)(this.Top)); } for (int i = 0; i < _items.Count; i++) { DrawingItem item = _items[i]; if (item.Visible) { item.OnDraw(g); } } g.Restore(gs); } }