Windows 10 Styled ContextMenuStrip

有没有办法使用Visual Studio和Windows 10样式的窗体创建ContextMenuStrip。 我知道,它的渲染器可以改变,看起来像Windows Vista,7和8.这就是我所做的:

在此处输入图像描述

但我也希望在Windows 10中看起来像这样:

在此处输入图像描述

有没有办法使用Windows Forms,或者应该以某种特殊的方式,使用Metro类等?

您可以实现自定义Renderer并覆盖OnRenderArrowOnRenderItemCheck ,并将自定义ColorTable传递给它。 然后将其设置为ContextMenu Renderer

在此处输入图像描述

ColorTable代码:

 public class MyColorTable : ProfessionalColorTable { public override Color MenuItemBorder { get { return Color.WhiteSmoke; } } public override Color MenuItemSelected { get { return Color.WhiteSmoke; } } public override Color ToolStripDropDownBackground { get { return Color.White; } } public override Color ImageMarginGradientBegin { get { return Color.White; } } public override Color ImageMarginGradientMiddle { get { return Color.White; } } public override Color ImageMarginGradientEnd { get { return Color.White; } } } 

渲染器代码:

 public class MyRenderer : ToolStripProfessionalRenderer { public MyRenderer() : base(new MyColorTable()) { } protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; var r = new Rectangle(e.ArrowRectangle.Location, e.ArrowRectangle.Size); r.Inflate(-2, -6); e.Graphics.DrawLines(Pens.Black, new Point[]{ new Point(r.Left, r.Top), new Point(r.Right, r.Top + r.Height /2), new Point(r.Left, r.Top+ r.Height)}); } protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; var r = new Rectangle(e.ImageRectangle.Location, e.ImageRectangle.Size); r.Inflate(-4, -6); e.Graphics.DrawLines(Pens.Black, new Point[]{ new Point(r.Left, r.Bottom - r.Height /2), new Point(r.Left + r.Width /3, r.Bottom), new Point(r.Right, r.Top)}); } } 

表单加载代码:

 private void Form_Load(object sender, EventArgs e) { this.contextMenuStrip1.Renderer = new MyRenderer(); }