更改用于渲染MenuStrip的颜色

时间:2015-03-06 21:43:16

标签: c# winforms colors

我有一个WinForms程序,它在表单的顶部有一个MenuStrip控件。 ToolStripMenuItem中的每个MenuStrip都有一个下拉列表,其中包含一系列选项(新功能,打开功能,保存功能,...通常的票价)。

我想改变菜单的颜色,并且在每个单独的部分上这样做效果都很好。不幸的是,似乎有一个ToolStripDropDown控件被隐式添加到每个菜单项中以容纳他们的孩子,并且它以原生系统颜色显示并且给出了一切丑陋的边框:

Ugly drop-down

由于下拉菜单似乎是由菜单项隐式创建的,因此我找不到任何方法来访问它。是否可以更改下拉控件的背景和前景色,或者我是否可以在设计师外部手动创建它?

1 个答案:

答案 0 :(得分:1)

我选择了一个更完整的选项,灵感来自How to change Menu hover color - WINFORMS的答案。通过创建ProfessionalColorTable的子类,覆盖所有可能有用的颜色(删节代码):

public class CustomColorTable : ProfessionalColorTable
{
    //a bunch of other overrides...

    public override Color ToolStripBorder
    {
        get { return Color.FromArgb(0, 0, 0); }
    }
    public override Color ToolStripDropDownBackground
    {
        get { return Color.FromArgb(64, 64, 64); }
    }
    public override Color ToolStripGradientBegin
    {
        get { return Color.FromArgb(64, 64, 64); }
    }
    public override Color ToolStripGradientEnd
    {
        get { return Color.FromArgb(64, 64, 64); }
    }
    public override Color ToolStripGradientMiddle
    {
        get { return Color.FromArgb(64, 64, 64); }
    }
}

然后将以下内容添加到构造函数中:

this.menuStrip_Main.RenderMode = ToolStripRenderMode.Professional;
this.menuStrip_Main.Renderer = new ToolStripProfessionalRenderer(new CustomColorTable());

渲染器处理所有繁重的工作,一切看起来都很棒。最重要的是,设计师仍然可以使用MenuStrip及其子项,但外观不再匹配。