我创建了一个Windows窗体工具,并添加了一个包含多个项目和下拉菜单的菜单条。一切正常,当我选择下拉菜单项“文件”时,它会正确扩展。但是当光标将工具条菜单项“文件”留给下拉菜单项时,它会自动将其颜色更改为白色,这样您就不能再读取白色文本了:
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保持为蓝色/中蓝色。
干杯
弗洛里安
答案 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());