是否可以更改ToolStrip菜单下拉列表的边框颜色。
是的。继承自ProfessionalColorTable
类的类可以按预期工作:
class MenuColorTable : ProfessionalColorTable
{
public MenuColorTable()
{
// see notes
base.UseSystemColors = false;
}
public override System.Drawing.Color MenuBorder
{
get{return Color.Fuchsia;}
}
public override System.Drawing.Color MenuItemBorder
{
get{return Color.DarkViolet;}
}
public override Color MenuItemSelected
{
get { return Color.Cornsilk;}
}
public override Color MenuItemSelectedGradientBegin
{
get{return Color.LawnGreen;}
}
public override Color MenuItemSelectedGradientEnd
{
get { return Color.MediumSeaGreen; }
}
public override Color MenuStripGradientBegin
{
get { return Color.AliceBlue; }
}
public override Color MenuStripGradientEnd
{
get { return Color.DodgerBlue; }
}
}
在表单加载时:menuStrip1.Renderer = new ToolStripProfessionalRenderer(new MenuColorTable());
如果未开启视觉样式,则不会使用所有的颜色表项,而是会使用一些SystemColors
。您可以在Main()
中启用视觉样式:// must be done before any UI elements are used
Application.EnableVisualStyles();
你可能还希望禁用系统颜色,如ctor中所示。无论启用视觉样式与否,默认值都应为false,但也许有其他更改?
base.UseSystemColors = false;
为了实现颜色表中的所有渲染元素,必须同时使用EnableVisualStyles()
和UseSystemColors = false;
,否则只会使用其中一部分。(尽管无论如何,MenuBorder
似乎始终有效。)否则,结果将如预期所示:
菜单渐变从AliceBlue到DodgerBlue;鼠标悬停在项目上时,使用自上而下的LawnGreen到MediumSeaGreen渐变(未显示鼠标)。
打开菜单时,菜单边框为Fuschia(嗯嗯,很舒缓!)
当鼠标悬停在其中一个项目上(未显示鼠标),该项目使用了MenuItemSelected
颜色,它是Consilk。
如果您无法使覆盖生效,请检查是否使用了正确的重载(或者它们是否具有所暗示的含义,有些一开始可能会引导入歧途)。
您还可以检查是否使用了MenuStrip
菜单,.Net确实有另一个(更旧的)菜单类,但必须进行搜索才能找到。您还可以更改或禁用任何主题,以查看是否会产生不良影响。
menuStrip1.BackColor
似乎只改变了顶部/主菜单文本。此外,如果您想要同步一些更改以模拟Glow效果,还有MouseEnter/MouseLeave事件。不过,那可能会很繁琐。 - Ňɏssa Pøngjǣrdenlarp您可以通过实现继承ProfessionalColorTable并覆盖正确属性的自定义颜色表来完成。为此,请执行以下步骤:
步骤
CustomColorTable 代码
public class CustomColorTable:ProfessionalColorTable
{
public override Color ImageMarginGradientBegin
{
get
{
return Color.MidnightBlue;
}
}
public override Color ImageMarginGradientMiddle
{
get
{
return Color.MidnightBlue;
}
}
public override Color ImageMarginGradientEnd
{
get
{
return Color.MidnightBlue;
}
}
public override Color ToolStripDropDownBackground
{
get
{
return Color.MidnightBlue;
}
}
}
表单加载代码
private void Form_Load(object sender, EventArgs e)
{
ToolStripManager.Renderer = new ToolStripProfessionalRenderer(new CustomColorTable());
}
截图
这是普通截图:
这是一个2倍放大的截图:
如果您不想在菜单项中使用图像,也有另一种替代解决方案。在这种情况下,找到下拉按钮的DropDown属性并强制转换为ToolStripDropDownMenu,然后将其ShowImageMargin属性设置为false,将BackColor属性设置为您想要的颜色(蓝色)。
private void Form_Load(object sender, EventArgs e)
{
//The item with text "My Menu" in your sample
var dropDownMenu = (ToolStripDropDownMenu)this.myMenuToolStripDropDownButton1.DropDown;
dropDownMenu.ShowImageMargin = false;
dropDownMenu.BackColor = Color.Navy;
}
我现在无法制作演示应用程序,但是本文中的屏幕截图http://www.vbforums.com/showthread.php?596563-100-Customizable-MenuStrip-ToolStrip-StatusStrip-including-common-presets证明了边框颜色的更改是可能的。
那个人开发了一些库,但它基于标准的ToolStrip实现。
我希望这个链接对您有所帮助。
您可以给项目设置负边距以覆盖边框。