当光标离开激活的项目时,工具条菜单项会自行更改其颜色
Tool strip menu item changes its color by itself when cursor leaves activated item
我创建了一个 Windows 表单工具并添加了一个包含多个项目和一个下拉菜单的菜单条。一切正常,当我 select 下拉菜单项 "File" 时,它会正确展开。但是当光标离开工具条菜单项 "File" 到下拉菜单项时,它会自动将其颜色更改为白色,这样您就无法再阅读白色文本了:
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;
}
}
}
我想我必须更改另一个 属性 或渲染器中的行为,但我什至不知道是哪一个以及如何更改它。当鼠标光标离开这个元素时,请帮助我简单地保持项目颜色为蓝色/中蓝色。
干杯
弗洛里安
通过尝试多个渲染器选项找到了解决方案:
我删除了以前的 "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());
我创建了一个 Windows 表单工具并添加了一个包含多个项目和一个下拉菜单的菜单条。一切正常,当我 select 下拉菜单项 "File" 时,它会正确展开。但是当光标离开工具条菜单项 "File" 到下拉菜单项时,它会自动将其颜色更改为白色,这样您就无法再阅读白色文本了:
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;
}
}
}
我想我必须更改另一个 属性 或渲染器中的行为,但我什至不知道是哪一个以及如何更改它。当鼠标光标离开这个元素时,请帮助我简单地保持项目颜色为蓝色/中蓝色。
干杯
弗洛里安
通过尝试多个渲染器选项找到了解决方案: 我删除了以前的 "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());