C# ';白条';关于MenuStripDropDown
我目前在C#windows窗体应用程序上为MenuStrip设置了自定义渲染:C# ';白条';关于MenuStripDropDown,c#,winforms,renderer,menustrip,C#,Winforms,Renderer,Menustrip,我目前在C#windows窗体应用程序上为MenuStrip设置了自定义渲染: private class HeaderMenuRender : ProfessionalColorTable { public override Color MenuItemSelectedGradientBegin { get { return Color.Gray;
private class HeaderMenuRender : ProfessionalColorTable
{
public override Color MenuItemSelectedGradientBegin
{
get
{
return Color.Gray;
}
}
public override Color MenuItemSelectedGradientEnd
{
get
{
return Color.Gray;
}
}
public override Color MenuItemPressedGradientBegin
{
get
{
return Color.Gray;
}
}
public override Color MenuItemPressedGradientEnd
{
get
{
return Color.Gray;
}
}
public override Color MenuItemBorder
{
get
{
return Color.Gray;
}
}
public override Color MenuBorder
{
get
{
return Color.Gray;
}
}
}
然后将其应用于窗体上的现有MenuStrip控件以创建自定义渲染
但是,当运行应用程序并从显示的菜单中进行选择时,尽管菜单选项的颜色正确,但会有一个小的“白色”(可以说是“控制”颜色)条,它跨越所选菜单选项的长度(如下面的蓝色框所示):
是否有自定义渲染器的特定属性未包含或缺少设置MenuStrip选定项的此特定部分的内容?我在其他地方看到的示例似乎没有这个问题。在上面的代码中,似乎您使用
BackColor
属性制作了项目灰色
您可以使用overrideToolStripDropDownBackground
返回Color.Gray
,这将删除该行
您还可以覆盖ImageMarginGradientBegin
、ImageMarginGradientMiddle
和imagemargingradiented
使图像/复选框区域也变为灰色
以下是我添加到代码中以获得所需值的内容:
public override Color ImageMarginGradientBegin
{
get { return Color.Gray; }
}
public override Color ImageMarginGradientMiddle
{
get { return Color.Gray; }
}
public override Color ImageMarginGradientEnd
{
get { return Color.Gray; }
}
public override Color ToolStripDropDownBackground
{
get { return Color.Gray; }
}
快速、简单、干净。喜欢。而且要求也不高,因为您是对的,它设置每个ToolStripMenuItem的背景色,而不必使用许多不同的覆盖更改MenuStrip本身的颜色;只要看看它,就会发现有一个更好的方法,因为它并没有真正将梯度用于其预期目的。我也使图标变成灰色,但我宁愿只删除图标图像的空白。目前有一些问题正在删除子菜单上的问题,但我想先看一看,因为这是一个单独的问题。欢迎你,顺便说一句,当你接受答案时,你也可以投票支持答案,这完全不是强制性的,而是合理和推荐的,这是你的好意:)这是你的好意:)太棒了。只是太神了