MenuItem的颜色更改

时间:2016-04-21 10:56:08

标签: c# winforms visual-studio menustrip toolstripmenu

我正在编写备份工具。在我的工具之上,我有一个menustrip包含两个tooltripmenuitems。我把颜色改变了一点,达到了我的期望。没有重点菜单看起来很棒:

Unclicked Menu Item

当我现在点击菜单项“文件”打开上下文菜单时,颜色变为白色,我无法再阅读文字了:

Clicked Menu Item

有人可以告诉我在哪里可以改变这种行为吗?我使用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);
//

2 个答案:

答案 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;
        }
    }
}
}

这是上面代码的结果:

Custom menu

答案 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();
    }