我正在尝试制作类似于Visual Studio 2013的MenuStrip。 到目前为止,我已成功使用自定义渲染器更改为项目标题MenuStrip的颜色。
这里是代码:
public class CGMenuItemRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
{
if (e.Item.Pressed)
{
Rectangle rc = new Rectangle(Point.Empty, e.Item.Size);
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(234, 240, 255)), rc);
e.Graphics.DrawRectangle(new Pen(Color.FromArgb(155, 167, 183)), 0, 0, rc.Width - 1, rc.Height - 1);
rc = new Rectangle(Point.Empty + e.Item.Size, e.Item.Size);
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(234, 240, 255)), rc);
e.Graphics.DrawRectangle(new Pen(Color.FromArgb(155, 167, 183)), 0, 0, rc.Width - 1, rc.Height - 1);
}
else if (e.Item.Selected)
{
Rectangle rc = new Rectangle(Point.Empty, e.Item.Size);
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(255, 232, 166)), rc);
e.Graphics.DrawRectangle(new Pen(Color.FromArgb(229, 195, 101)), 0, 0, rc.Width - 1, rc.Height - 1);
}
else
{
base.OnRenderMenuItemBackground(e);
}
}
}
public partial class CGMenu : MenuStrip
{
public CGMenu()
{
Initialize();
}
private void Initialize()
{
InitializeComponent();
BackColor = Color.FromArgb(214, 219, 233);
Renderer = new CGMenuItemRenderer();
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
}
当我在我的应用程序上使用CGMenu
时,它的工作很好地在第一个:
这完全是我所期待的,具有像Visual Studio一样的蓝色背景,当我将它悬停时,颜色会像Visual Studio一样变成黄色。 但是,当我在其上添加子菜单时,背景颜色与标题1不同:
另请注意,第一个项目和标题之间有一个小的白色间隙,但我很确定它,因为背景是白色的。
那么你们有没有想法如何将背景颜色应用到子菜单? 谢谢!
修改 我在Visual Studio MenuStrip / MainMenu中发现了一些不同的东西。 我不知道如何使用MenuStrip实现这一目标: