C# Winforms Eyeshot工具栏按钮及图标过小,如何增大尺寸?
Eyeshot Winforms 工具栏按钮放大实现方案
方案1:调整内置属性(无需重写逻辑,推荐优先使用)
- 直接修改Eyeshot控件实例的工具栏按钮尺寸属性,示例代码:
// 此处design1为你的Eyeshot控件实例名称 // 设置按钮整体尺寸,单位为像素,可按需调整 design1.Toolbar.ButtonSize = new Size(48, 48); // 设置图标缩放尺寸,建议比按钮尺寸小8~16px留内边距 design1.Toolbar.ImageScalingSize = new Size(36, 36);
- 高DPI设备适配:在程序入口
Program.cs的Main方法中添加如下代码,避免图标模糊:
Application.SetHighDpiMode(HighDpiMode.SystemAware); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);
方案2:重写工具栏绘制方法(自定义程度更高,适配特殊需求)
如果默认属性调整无法满足需求,可通过继承重写工具栏绘制逻辑实现自定义放大效果:
- 自定义工具栏类,继承Eyeshot原生Toolbar类,重写按钮绘制方法:
using DevDept.Eyeshot; using System.Drawing; using System.Drawing.Drawing2D; public class LargeSizeToolbar : Toolbar { public LargeSizeToolbar() { // 初始化默认放大参数,可外部修改 ButtonSize = new Size(60, 60); ImageScalingSize = new Size(40, 40); } protected override void DrawButton(Graphics g, ToolbarButton button, int index, Rectangle buttonRect) { // 开启抗锯齿提升绘制质量 g.SmoothingMode = SmoothingMode.AntiAlias; // 自定义按钮绘制区域,可按需调整放大比例 Rectangle drawRect = new Rectangle( buttonRect.X, buttonRect.Y, (int)(buttonRect.Width * 1.1f), (int)(buttonRect.Height * 1.1f) ); // 绘制按钮背景:保留原生状态逻辑(按下、悬停、禁用) Brush bgBrush; if (button.Enabled == false) bgBrush = Brushes.LightGray; else if (button.Pressed) bgBrush = Brushes.SkyBlue; else if (button.Hovered) bgBrush = Brushes.LightSkyBlue; else bgBrush = Brushes.Transparent; // 绘制圆角背景 using (GraphicsPath path = GetRoundedRectPath(drawRect, 4)) { g.FillPath(bgBrush, path); } // 绘制放大后的图标 if (button.Image != null) { g.DrawImage(button.Image, new Rectangle( drawRect.X + (drawRect.Width - ImageScalingSize.Width) / 2, drawRect.Y + 6, ImageScalingSize.Width, ImageScalingSize.Height ) ); } // 可选:绘制按钮文字 if (!string.IsNullOrEmpty(button.Text)) { g.DrawString(button.Text, Font, Brushes.Black, new PointF( drawRect.X + (drawRect.Width - g.MeasureString(button.Text, Font).Width) / 2, drawRect.Y + ImageScalingSize.Height + 8 ) ); } } // 辅助方法:生成圆角矩形路径 private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius) { GraphicsPath path = new GraphicsPath(); path.AddArc(rect.X, rect.Y, radius, radius, 180, 90); path.AddArc(rect.Right - radius, rect.Y, radius, radius, 270, 90); path.AddArc(rect.Right - radius, rect.Bottom - radius, radius, radius, 0, 90); path.AddArc(rect.X, rect.Bottom - radius, radius, radius, 90, 90); path.CloseAllFigures(); return path; } }
- 替换Eyeshot默认工具栏,在窗体构造函数
InitializeComponent()之后添加如下代码:
// 移除原生工具栏 design1.Controls.Remove(design1.Toolbar); // 加载自定义工具栏 var customToolbar = new LargeSizeToolbar(); customToolbar.Design = design1; customToolbar.Dock = DockStyle.Top; design1.Controls.Add(customToolbar); design1.Toolbar = customToolbar; // 刷新工具栏 design1.Toolbar.UpdateButtons();
提示:如果不需要自定义背景、文字等样式,只需保留放大绘制区域的逻辑,其余可直接调用
base.DrawButton(g, button, index, enlargedRect)复用原生绘制逻辑,代码更精简。
内容的提问来源于stack exchange,提问作者Daniel Lord
相关产品推荐
相关产品推荐

