是否可以更改工具条菜单下拉列表的边框颜色。
在下面的示例中,我希望下拉菜单具有 1 种颜色(蓝色),而当前没有显示白色边框,但保持主菜单(“我的菜单”)项为白色。
有任何想法吗?
Is it possible to change the border color of a toolstrip menu dropdown list.
是的。一个继承自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 渐变(鼠标未显示)。
打开时,菜单边框是紫红色(嗯,舒缓!)
将鼠标悬停在其中一个项目上(鼠标未显示),该项目使用MenuItemSelected
Consilk 颜色。
如果您无法让您的覆盖工作,请检查您是否使用了正确的覆盖(或者它们的意思是顾名思义,有些一开始会产生误导)。
您还可以检查您是否使用了MenuStrip
菜单,Net 确实有另一个(较旧的)菜单类,尽管您必须去搜索才能找到它。您还可以更改或禁用任何主题,以查看是否会导致不利影响。
要更改边框颜色,遵循已接受答案中描述的 Plutonix 解决方案就足够了。但是要删除项目和菜单边框之间的白色边框,您应该遵循以下解决方案之一:
您可以通过实现继承 ProfessionalColorTable并覆盖正确属性的自定义颜色表来实现。为此,请按照下列步骤操作:
脚步
自定义颜色表代码
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 实现的。
我希望这个链接会有所帮助。
您可以给项目负边距以覆盖边框。