C# ';白条';关于MenuStripDropDown

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;

我目前在C#windows窗体应用程序上为MenuStrip设置了自定义渲染:

        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
属性制作了项目
灰色

您可以使用override
ToolStripDropDownBackground
返回
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本身的颜色;只要看看它,就会发现有一个更好的方法,因为它并没有真正将梯度用于其预期目的。我也使图标变成灰色,但我宁愿只删除图标图像的空白。目前有一些问题正在删除子菜单上的问题,但我想先看一看,因为这是一个单独的问题。欢迎你,顺便说一句,当你接受答案时,你也可以投票支持答案,这完全不是强制性的,而是合理和推荐的,这是你的好意:)这是你的好意:)太棒了。只是太神了