当光标离开激活的项目时,工具条菜单项会自动更改其颜色

时间:2016-06-06 08:39:30

标签: c# winforms visual-studio renderer menustrip

我创建了一个Windows窗体工具,并添加了一个包含多个项目和下拉菜单的菜单条。一切正常,当我选择下拉菜单项“文件”时,它会正确扩展。但是当光标将工具条菜单项“文件”留给下拉菜单项时,它会自动将其颜色更改为白色,这样您就不能再读取白色文本了:

Unclicked menu strip

Clicked menu strip with mouse cursor on dropdown items

之前我也遇到了类似菜单条颜色变化的问题,因此我已经定义了一个渲染器:

class BlueRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
    {
        if (!e.Item.Selected)
        {
            base.OnRenderMenuItemBackground(e);
            e.Item.BackColor = Color.MediumBlue;  

        }
        else
        {                
            Rectangle rc = new Rectangle(Point.Empty, e.Item.Size);
            e.Graphics.FillRectangle(Brushes.Blue, rc);                
            e.Graphics.DrawRectangle(Pens.MediumBlue, 1, 0, rc.Width - 2, rc.Height - 1);                
            e.Item.BackColor = Color.MediumBlue;
            base.OnRenderItemBackground(e);
            e.Item.BackColor = Color.MediumBlue;
        }
    }
    protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
    {
        base.OnRenderItemText(e);
        if (!e.Item.Selected)
        {
            e.Item.ForeColor = SystemColors.ControlLightLight;
        }
        else
        {
            e.Item.ForeColor = SystemColors.ControlLightLight;
        }
    }
}

我想我必须在渲染器中更改另一个属性或行为,但我甚至不知道哪一个以及如何更改它。当鼠标光标离开此元素时,请帮我简单地将itemcolor保持为蓝色/中蓝色。

干杯

弗洛里安

1 个答案:

答案 0 :(得分:0)

通过尝试多个渲染器选项找到解决方案: 我删除了我以前的“BlueRenderer”并指定了一个ProfessionalColorTable:

public class ownColorTable : System.Windows.Forms.ProfessionalColorTable
{
    public override Color MenuItemPressedGradientBegin
    {
        get
        {
            return Color.Blue;
        }
    }

    public override Color MenuItemPressedGradientEnd
    {
        get
        {
            return Color.Blue;
        }
    }

然后我按照以下方式将ToolStripProfessionalRenderer初始化:

menuStrip1.Renderer = new ToolStripProfessionalRenderer(new ownColorTable());