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; item 将鼠标悬停在其上时使用从上到下的 LawnGreen 到 MediumSeaGreen 渐变(鼠标未显示)。
打开时,菜单边框是紫红色(嗯,舒缓!)
将鼠标悬停在其中一项上时(鼠标未显示),该项使用 MenuItemSelected 颜色,即 Consilk。
如果您无法让您的覆盖正常工作,请检查您是否使用了正确的覆盖(或者它们的意思是否如其名称所暗示的那样,有些起初会产生误导)。
您还可以检查您是否使用MenuStrip 作为菜单,Net 确实有另一个(较旧的)菜单类,尽管您必须去搜索才能找到它。您还可以更改或禁用任何主题,看看是否会造成不利影响。