问题
I am programming a Backup Tool. On top of my tool I have a menustrip containing two toolstripmenuitems. I changed the colors a little bit to my expectations. Not focused the menu looks great:
When I now click on the menu item "File" to open the context menu, the color changes to white and I am not able to read the text anymore:
Can anyone please tell me where I can change that behavior? I use Visual Studio 2013 Ultimate, Windows Forms Application, Code is in C#.
Here is the code:
//
// initializing menuStrip1
//
this.menuStrip1.BackColor = System.Drawing.Color.MediumBlue;
this.menuStrip1.BackgroundImageLayout =
System.Windows.Forms.ImageLayout.Center;
this.menuStrip1.Font = new System.Drawing.Font("Segoe UI Semilight",
15.75F, System.Drawing.FontStyle.Regular,
//
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem,
this.helpToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.MinimumSize = new System.Drawing.Size(0, 40);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(1056, 40);
this.menuStrip1.TabIndex = 77;
this.menuStrip1.Text = "menuStrip1";
//
// initializing fileToolStripMenuItem and adding to menuStrip1
//
this.fileToolStripMenuItem.DropDownItems.AddRange(new
System.Windows.Forms.ToolStripItem[] {
this.saveToolStripMenuItem,
this.saveAsToolStripMenuItem,
this.loadToolStripMenuItem});
this.fileToolStripMenuItem.Font = new System.Drawing.Font("Calibri Light",
15.75F, System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.fileToolStripMenuItem.ForeColor =
System.Drawing.SystemColors.ControlLightLight;
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(54, 36);
this.fileToolStripMenuItem.Text = "File";
this.fileToolStripMenuItem.Click += new System.EventHandler
(this.fileToolStripMenuItem_Click);
//
// initializing saveToolStripMenuItem and adding to fileToolStripMenuItem
//
this.saveToolStripMenuItem.BackColor = System.Drawing.Color.MediumBlue;
this.saveToolStripMenuItem.ForeColor =
System.Drawing.SystemColors.ControlLightLight;
this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
this.saveToolStripMenuItem.Size = new System.Drawing.Size(166, 30);
this.saveToolStripMenuItem.Text = "Save";
this.saveToolStripMenuItem.Click += new System.EventHandler
(this.saveToolStripMenuItem_Click);
回答1:
By default this feature is not available out of the box. You need to create a custom Renderer
for you tool strip to achieve this.
Create a class that inherits from ToolStripProfessionalRenderer
-
private class BlueRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
{
Rectangle rc = new Rectangle(Point.Empty, e.Item.Size);
Color c = Color.MediumBlue;
using (SolidBrush brush = new SolidBrush(c))
e.Graphics.FillRectangle(brush, rc);
}
}
And attach this renderer to your menu strip in your form constructor -
public Form1()
{
InitializeComponent();
menuStrip1.Renderer = new BlueRenderer();
}
回答2:
You can create your own ProfessionalColorTable
and override it's properties:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
menuStrip1.Renderer = new ToolStripProfessionalRenderer(new MyColorTable());
}
}
public class MyColorTable : ProfessionalColorTable
{
public override Color ToolStripDropDownBackground
{
get
{
return Color.Blue;
}
}
public override Color ImageMarginGradientBegin
{
get
{
return Color.Blue;
}
}
public override Color ImageMarginGradientMiddle
{
get
{
return Color.Blue;
}
}
public override Color ImageMarginGradientEnd
{
get
{
return Color.Blue;
}
}
public override Color MenuBorder
{
get
{
return Color.Black;
}
}
public override Color MenuItemBorder
{
get
{
return Color.Black;
}
}
public override Color MenuItemSelected
{
get
{
return Color.Navy;
}
}
public override Color MenuStripGradientBegin
{
get
{
return Color.Blue;
}
}
public override Color MenuStripGradientEnd
{
get
{
return Color.Blue;
}
}
public override Color MenuItemSelectedGradientBegin
{
get
{
return Color.Navy;
}
}
public override Color MenuItemSelectedGradientEnd
{
get
{
return Color.Navy;
}
}
public override Color MenuItemPressedGradientBegin
{
get
{
return Color.Blue;
}
}
public override Color MenuItemPressedGradientEnd
{
get
{
return Color.Blue;
}
}
}
}
This is result of code above:
来源:https://stackoverflow.com/questions/36767478/color-change-for-menuitem