Skip to main content
A newer version of this page is available. .

How to: Custom Paint a Menu Bar of a Sub-Menu

  • 2 minutes to read

This example shows you how to paint the menu bar using the BarCustomContainerItem.PaintMenuBar event. The sample handler fills the background of the bar with a texture and linear gradient brush. Then it paints the name of the container item, whose menu is displayed.

The image below demonstrates code execution. (Note that the BarCustomContainerItem.MenuBarWidth property of corresponding container items must be set to 20 to obtain similar output).

MenuBar - SubMenuCustom

using System.Drawing;
using System.Drawing.Drawing2D;
using DevExpress.XtraBars;

private void BarSubItem1_PaintMenuBar(object sender, BarCustomDrawEventArgs e) {
   // creating a texture brush and filling the background with an image
   TextureBrush brush = new TextureBrush(Image.FromFile(@"C:\Images\lblue.gif"));
   e.Graphics.FillRectangle(brush, e.Bounds);
   // filling the background with a linear gradient brush
   LinearGradientBrush lBrush = new LinearGradientBrush(e.Bounds,  
     Color.FromArgb(0, 0, 0, 0), Color.Blue, LinearGradientMode.Vertical);
   e.Graphics.FillRectangle(lBrush, e.Bounds);

   // formatting the output string
   StringFormat outStringFormat = new StringFormat();
   outStringFormat.Alignment = StringAlignment.Near;
   outStringFormat.LineAlignment = StringAlignment.Center;
   outStringFormat.FormatFlags |= StringFormatFlags.DirectionVertical;

   // transforming the painting surface and bounding rectangle
   // this allows to provide the proper string orientation
   e.Graphics.RotateTransform(180);
   Rectangle rect = e.Bounds;
   rect.Offset(-rect.Width, -rect.Height);        

   // determining the caption of the owning container item and painting it
   BarItem item = sender as BarItem;
   string outString = item.Caption.Replace("&", "") + " menu";
   e.Graphics.DrawString(outString, new Font("Verdana", 11, FontStyle.Bold), 
     new SolidBrush(Color.White), rect, outStringFormat);
   e.Graphics.ResetTransform();

   // prohibiting default painting
   e.Handled = true;
}