我正在编写备份工具。在我的工具之上,我有一个menustrip包含两个tooltripmenuitems。我把颜色改变了一点,达到了我的期望。没有重点菜单看起来很棒:
当我现在点击菜单项“文件”打开上下文菜单时,颜色变为白色,我无法再阅读文字了:
有人可以告诉我在哪里可以改变这种行为吗?我使用Visual Studio 2013 Ultimate,Windows Forms Application,Code在C#中。
以下是代码:
//
// 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);
答案 0 :(得分:5)
您可以创建自己的ProfessionalColorTable
并覆盖它的属性:
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;
}
}
}
}
这是上面代码的结果:
答案 1 :(得分:3)
默认情况下,此功能不可用。您需要为工具条创建自定义Renderer
才能实现此目的。
创建一个继承自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);
}
}
并将此渲染器附加到表单构造函数中的菜单条 -
public Form1()
{
InitializeComponent();
menuStrip1.Renderer = new BlueRenderer();
}