当您使用 aToolStripProfessionalRenderer
时,更改背景颜色不会更改突出显示颜色。此外,当您的工具条使用单个渲染器时,由于渲染器使用渲染器的MenuItemSelectedColor
属性 ProfessionalColorTable
,它不能根据条件渲染突出显示颜色。
您可以动态更改渲染器ToolStrip
并将其渲染器设置为以所需颜色绘制突出显示的渲染器。

以下是我使用的步骤:
(1)将RenderMode
你的设置ToolStrip
为ManagerRenderMode
:
this.toolStrip1.RenderMode = ToolStripRenderMode.ManagerRenderMode;
(2)创建一个自定义颜色表,您可以将其传递MenuItemSelectedColor
给它:
public class MyColorTable : ProfessionalColorTable
{
private Color menuItemSelectedColor;
public MyColorTable(Color color): base()
{
menuItemSelectedColor = color;
}
public override Color MenuItemSelected
{
get { return menuItemSelectedColor; }
}
}
(3)在表单级别定义您需要的渲染器:
ToolStripProfessionalRenderer r =
new ToolStripProfessionalRenderer(new MyColorTable(Color.Red));
ToolStripProfessionalRenderer g =
new ToolStripProfessionalRenderer(new MyColorTable(Color.Green));
ToolStripProfessionalRenderer b =
new ToolStripProfessionalRenderer(new MyColorTable(Color.Blue));
(4)您想要使用自定义渲染器的所有菜单项的句柄MouseEnter
和事件,并将此处理程序分配给所有菜单项:MouseLeave
private void menuItem_MouseEnter(object sender, EventArgs e)
{
var item = (ToolStripMenuItem)sender;
if (item.Text == "Yes")
ToolStripManager.Renderer = g;
else if (item.Text == "No")
ToolStripManager.Renderer = r;
else if (item.Text == "MayBe")
ToolStripManager.Renderer = b;
else
ToolStripManager.Renderer = null; // or use your default renderer
}
private void menuItem_MouseLeave(object sender, EventArgs e)
{
ToolStripManager.Renderer = null; // or use your default renderer
}