* UINavBar: 修正下拉菜单文字显示垂直居中

* UINavBar: ImageList为空时,下拉菜单增加Symbol绘制
* UIContextMenuStrip: 修正文字显示垂直居中
* UIContextMenuStrip: 当右键菜单未绑定ImageList,并且ImageIndex>0时,将ImageIndex绑定为Symbol绘制
This commit is contained in:
Sunny 2023-10-17 16:52:26 +08:00
parent 96b64900d8
commit 4e54367f28
2 changed files with 62 additions and 7 deletions

View File

@ -19,6 +19,8 @@
* 2020-01-01: V2.2.0
* 2020-04-25: V2.2.4
* 2022-03-19: V3.1.1
* 2023-10-17: V3.5.1
* 2023-10-17: V3.5.1 ImageListImageIndex>0ImageIndex绑定为Symbol绘制
******************************************************************************/
using System.ComponentModel;
@ -29,13 +31,13 @@ namespace Sunny.UI
{
public sealed class UIContextMenuStrip : ContextMenuStrip, IStyleInterface, IZoomScale
{
public ContextMenuColorTable ColorTable = new ContextMenuColorTable();
private ContextMenuColorTable ColorTable = new ContextMenuColorTable();
public UIContextMenuStrip()
{
Font = UIStyles.Font();
RenderMode = ToolStripRenderMode.Professional;
Renderer = new ToolStripProfessionalRenderer(ColorTable);
Renderer = new UIToolStripRenderer(ColorTable);
Version = UIGlobal.Version;
ColorTable.SetStyleColor(UIStyles.Blue);
@ -139,7 +141,40 @@ namespace Sunny.UI
}
}
public class ContextMenuColorTable : ProfessionalColorTable
internal class UIToolStripRenderer : ToolStripProfessionalRenderer
{
public UIToolStripRenderer() { }
public UIToolStripRenderer(ProfessionalColorTable professionalColorTable) : base(professionalColorTable) { }
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
//调整文本区域的位置和大小以实现垂直居中
Rectangle textRect = new Rectangle(e.TextRectangle.Left, e.Item.ContentRectangle.Top, e.TextRectangle.Width, e.Item.ContentRectangle.Height);
//设置文本绘制格式
TextFormatFlags flags = TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine;
//绘制文本
TextRenderer.DrawText(e.Graphics, e.Text, e.TextFont, textRect, e.TextColor, flags);
//当右键菜单未绑定ImageList并且ImageIndex>0时将ImageIndex绑定为Symbol绘制
ToolStripItem item = e.Item;
while (item.Owner is not ContextMenuStrip)
{
if (item.Owner is ToolStripDropDownMenu)
item = item.OwnerItem;
}
ContextMenuStrip ownerContextMenu = item.Owner as ContextMenuStrip;
if (ownerContextMenu.ImageList != null) return;
if (e.Item.ImageIndex <= 0) return;
Rectangle imageRect = new Rectangle(0, e.Item.ContentRectangle.Top, e.TextRectangle.Left, e.Item.ContentRectangle.Height);
e.Graphics.DrawFontImage(e.Item.ImageIndex, 24, e.TextColor, imageRect);
}
}
internal class ContextMenuColorTable : ProfessionalColorTable
{
private UIBaseStyle StyleColor = UIStyles.GetStyleColor(UIStyle.Blue);

View File

@ -27,6 +27,8 @@
* 2023-02-22: V3.3.2
* 2023-05-12: V3.3.6 DrawString函数
* 2023-05-16: V3.3.6 DrawFontImage函数
* 2023-10-17: V3.5.1
* 2023-10-17: V3.5.1 ImageList为空时Symbol绘制
******************************************************************************/
using System;
@ -647,7 +649,16 @@ namespace Sunny.UI
{
ToolStripMenuItem item = new ToolStripMenuItem(node.Text) { Tag = node };
item.Click += Item_Click;
if (ImageList != null) item.ImageIndex = node.ImageIndex;
if (ImageList != null)
{
item.ImageIndex = node.ImageIndex;
}
else
{
int symbol = MenuHelper.GetSymbol(node);
if (symbol > 0) item.ImageIndex = symbol;
}
NavBarMenu.Items.Add(item);
if (node.Nodes.Count > 0)
@ -663,10 +674,10 @@ namespace Sunny.UI
// NavBarMenu.Width = NodeSize.Width;
//}
foreach (ToolStripItem item in NavBarMenu.Items)
foreach (ToolStripMenuItem item in NavBarMenu.Items)
{
item.AutoSize = false;
item.Width = NavBarMenu.Width - 1;
item.Width = NavBarMenu.Width + 3;
if (!DropDownItemAutoHeight)
{
@ -710,7 +721,16 @@ namespace Sunny.UI
foreach (TreeNode childNode in node.Nodes)
{
ToolStripMenuItem childItem = new ToolStripMenuItem(childNode.Text) { Tag = childNode };
if (ImageList != null) childItem.ImageIndex = childNode.ImageIndex;
if (ImageList != null)
{
childItem.ImageIndex = childNode.ImageIndex;
}
else
{
int symbol = MenuHelper.GetSymbol(childNode);
if (symbol > 0) childItem.ImageIndex = symbol;
}
childItem.Click += Item_Click;
item.DropDownItems.Add(childItem);