我有一个WinForms程序,它在表单的顶部有一个MenuStrip
控件。 ToolStripMenuItem
中的每个MenuStrip
都有一个下拉列表,其中包含一系列选项(新功能,打开功能,保存功能,...通常的票价)。
我想改变菜单的颜色,并且在每个单独的部分上这样做效果都很好。不幸的是,似乎有一个ToolStripDropDown
控件被隐式添加到每个菜单项中以容纳他们的孩子,并且它以原生系统颜色显示并且给出了一切丑陋的边框:
由于下拉菜单似乎是由菜单项隐式创建的,因此我找不到任何方法来访问它。是否可以更改下拉控件的背景和前景色,或者我是否可以在设计师外部手动创建它?
答案 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
及其子项,但外观不再匹配。