'White bar' 是一个 MenuStripDropDown

'White bar' on MenuStripDropDown

我目前在 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 控件以创建自定义呈现。

然而,当 运行 应用程序并从显示的菜单中进行选择时,尽管菜单选项的颜色正确,但仍有一个小 'White'(可以说是 'Control' colour) 横跨所选 MenuStrip 选项长度的栏(在下面的蓝色框中表示):

是否有特定的 属性 自定义渲染器我没有包括或者我缺少的东西正在设置 MenuStrip 所选项目的这个特定部分?我在别处看到的例子好像没有这个问题

在上面的代码中,您似乎使用 BackColor 属性.

创建了项目 Gray

您可以使用覆盖 ToolStripDropDownBackground 到 return Color.Gray,这会删除 while 行。

您还可以覆盖 ImageMarginGradientBeginImageMarginGradientMiddleImageMarginGradientEnd 以创建 image/checkbox 区域 Gray.

这是我添加到您的代码中以获得所需值的内容:

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; }
}