From 035c2e6ebda867c12ba477ad644b29dc9857b687 Mon Sep 17 00:00:00 2001 From: Sunny Date: Thu, 22 Feb 2024 21:41:52 +0800 Subject: [PATCH] =?UTF-8?q?*=20UIContextMenuStrip:=20=E8=8A=82=E7=82=B9Aut?= =?UTF-8?q?oSize=E6=97=B6=E4=B8=8D=E9=87=8D=E7=BB=98=EF=BC=8C=E9=87=8D?= =?UTF-8?q?=E7=BB=98=E6=97=B6=E8=80=83=E8=99=91Enabled=E4=B8=BAFalse?= =?UTF-8?q?=E6=97=B6=E9=A2=9C=E8=89=B2=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SunnyUI/Controls/UIContextMenuStrip.cs | 32 +++++++++++++++++++------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/SunnyUI/Controls/UIContextMenuStrip.cs b/SunnyUI/Controls/UIContextMenuStrip.cs index aa446010..90e1c449 100644 --- a/SunnyUI/Controls/UIContextMenuStrip.cs +++ b/SunnyUI/Controls/UIContextMenuStrip.cs @@ -22,6 +22,7 @@ * 2023-10-17: V3.5.1 修正文字显示垂直居中 * 2023-10-17: V3.5.1 当右键菜单未绑定ImageList,并且ImageIndex>0时,将ImageIndex绑定为Symbol绘制 * 2024-02-21: V3.6.3 修复显示快捷键文本位置 + * 2024-02-22: V3.6.3 节点AutoSize时不重绘,重绘时考虑Enabled为False时颜色显示 ******************************************************************************/ using System.ComponentModel; @@ -160,28 +161,43 @@ namespace Sunny.UI protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) { + if (e.Item.AutoSize) + { + base.OnRenderItemText(e); + return; + } + //调整文本区域的位置和大小以实现垂直居中 Rectangle textRect = new Rectangle(e.TextRectangle.Left, e.Item.ContentRectangle.Top, e.TextRectangle.Width, e.Item.ContentRectangle.Height); + ToolStripMenuItem stripItem = (ToolStripMenuItem)e.Item; + Rectangle backRect = new Rectangle(e.Item.Bounds.Left + 2, e.Item.Bounds.Top - 2, e.Item.Bounds.Width - 4, e.Item.Bounds.Height); - ToolStripMenuItem item1 = (ToolStripMenuItem)e.Item; - - if (e.Item.Selected) + if (e.Item.Enabled) { - e.Graphics.FillRectangle(ColorTable.MenuItemSelected, e.TextRectangle); + if (e.Item.Selected) + { + e.Graphics.FillRectangle(ColorTable.MenuItemSelected, backRect); + } + else + { + e.Graphics.FillRectangle(ColorTable.ImageMarginGradientBegin, backRect); + } } else { - e.Graphics.FillRectangle(ColorTable.ImageMarginGradientBegin, e.TextRectangle); + e.Graphics.FillRectangle(ColorTable.ImageMarginGradientBegin, backRect); } + Color textColor = e.TextColor; + if (!e.Item.Enabled) textColor = Color.Gray; //设置文本绘制格式 TextFormatFlags flags = TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine | TextFormatFlags.Left; - TextRenderer.DrawText(e.Graphics, e.Item.Text, e.TextFont, textRect, e.TextColor, flags); + TextRenderer.DrawText(e.Graphics, e.Item.Text, e.TextFont, textRect, textColor, flags); - if (item1.ShowShortcutKeys) + if (stripItem.ShowShortcutKeys) { flags = TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine | TextFormatFlags.Right; - TextRenderer.DrawText(e.Graphics, ShortcutToText(item1.ShortcutKeys, item1.ShortcutKeyDisplayString), e.TextFont, textRect, e.TextColor, flags); + TextRenderer.DrawText(e.Graphics, ShortcutToText(stripItem.ShortcutKeys, stripItem.ShortcutKeyDisplayString), e.TextFont, textRect, textColor, flags); } //当右键菜单未绑定ImageList,并且ImageIndex>0时,将ImageIndex绑定为Symbol绘制