有沒有辦法使用Windows 10風格的Visual Studio和Forms創建ContextMenuStrip。我知道,它的渲染器可以以有樣子的Windows Vista,7和8來改變這就是我做了什麼:Windows 10風格的上下文菜單條
但我也想使它看起來像這樣視窗10:
有沒有辦法使用Windows Forms來做到這一點,還是應該在一些特殊的方式來完成,使用地鐵類等?
有沒有辦法使用Windows 10風格的Visual Studio和Forms創建ContextMenuStrip。我知道,它的渲染器可以以有樣子的Windows Vista,7和8來改變這就是我做了什麼:Windows 10風格的上下文菜單條
但我也想使它看起來像這樣視窗10:
有沒有辦法使用Windows Forms來做到這一點,還是應該在一些特殊的方式來完成,使用地鐵類等?
您可以實施您的自定義Renderer
並覆蓋OnRenderArrow
和OnRenderItemCheck
並將您的自定義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)});
}
}
代碼窗體的Load:
private void Form_Load(object sender, EventArgs e)
{
this.contextMenuStrip1.Renderer = new MyRenderer();
}
感謝您的評論!爲我完美工作! –
歡迎您:) –
如果你想要它完全相同,那麼你需要使用本地菜單組件包裝。右鍵單擊工具箱>選擇項目> .NET Framework組件選項卡>勾選「ContextMenu」。 –
感謝您的評論!我想完全使用ContextMenuStrip,因爲它有一些功能,我想在我的應用程序中實現。我相信,仍然可以更改ContextMenuStrip的Renderer,以改變其視覺風格。 –
我正在尋找相同的東西,但是使用本機Win32 HMENU而不是WinForms ContextMenu(爲坐在系統托盤中的輕量級C++應用程序執行此操作)。任何人都有線索? –