资讯动态

SunnyUI 头像控件 UIAvatar 完全指南:三种显示方式、圆形/方形形状与主题样式联动

发布时间:2026/10/4 14:30:19 来源:尧图企业网站定制
UI组件桌面应用【免费下载链接】SunnyUISunnyUI.NET 是基于.NET Framework 4.0、.NET6、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。项目地址https://gitcode.com/gh_mirrors/su/SunnyUI点击查看免费下载UIAvatar 是 SunnyUI 开源 WinForm 控件库中专门用于展示头像的控件支持**图片Image、字体图标Symbol、文字Text三种内容呈现方式并可在圆形Circle与方形Square**两种形状间自由切换颜色随主题样式自动联动。本文以官方文档为基础结合 UIAvatar.cs 源码与 FAvatar 示例页 的实战配置完整讲解该控件的全部属性、图标选择流程、绘制原理与集成方式读完即可在项目中直接落地使用。一、UIAvatar 控件概述UIAvatar 在 SunnyUI 中的定位是头像控件常用于登录用户信息栏、联系人列表、消息页等需要展示人物头像或标识的场景。从源码看它被声明为[DefaultEvent(Click)] [DefaultProperty(Symbol)] [ToolboxItem(true)] [Description(头像控件)] public sealed class UIAvatar : UIControl, ISymbol, IZoomScale见 UIAvatar.cs其中默认属性为Symbol即字体图标编码是控件最常用的配置入口默认事件为Click可直接在设计器中双击头像编写点击逻辑如弹出用户菜单实现了IZoomScale接口支持 SunnyUI 的 DPI 缩放体系高分屏下自动按比例缩放头像与图标尺寸。构造时控件默认尺寸为 60×60关闭了文字与边框的默认绘制ShowText false、ShowRect false填充色与前景色取自 Blue 主题的AvatarFillColor/AvatarForeColor见 UIAvatar.cs。二、核心属性一览官方文档给出了完整的属性列表下表在原文基础上补充了源码确认的默认值与取值细节默认值以 UIAvatar.cs 中的特性标注为准属性说明类型默认值源码补充说明Style主题样式UIStyleBlue决定填充色/前景色的基准主题StyleCustomMode是否启用自定义主题风格boolfalse开启后颜色不再随主题联动AvatarSize头像大小int60实际绘制区边长可小于控件尺寸Icon显示方式UIIconSymbol枚举Image / Symbol / TextSymbol字体图标int61447源码标注默认 61447官方文档表格列 61452以当前源码为准可点击右侧按钮调出图标选择器SymbolColor图标颜色Color-不单独设置时使用ForeColorSymbolSize字体图标大小int45源码限制范围为16 ~ 128见 UIAvatar.csText显示的文本string-仅Icon Text时生效Image图片Imagenull仅Icon Image时生效绘制时自动裁剪为头像形状Shape显示形状UIShapeCircle枚举Circle圆形/ Square方形OffsetX水平偏移int0设计器不可见Browsable(false)用于微调整体位置OffsetY垂直偏移int0同上ForeColor字体图标颜色Color80,160,255Blue 主题下与主色一致FillColor填充颜色ColorSilver为背景色/透明色/空值时则不填充TagString关联控件数据的对象字符串string-轻量附加数据Version版本string--除表格所列外源码还提供了三组偏移与旋转细节属性官方文档未逐条列出但实测非常实用SymbolOffsetPoint字体图标的偏移位置默认 (0,0)SymbolRotateint字体图标旋转角度默认 0V3.5.1 版本新增TextOffset/ImageOffsetPoint文字与图片的偏移位置默认 (0,0)。相关实现见 UIAvatar.cs。三、字体图标Symbol模式与图标选择器头像最常用的内容是字体图标。UIAvatar 与 SunnyUI 的字体图标体系FontAwesome、Material Icons 等详见 symbol.md深度集成默认即呈现一个灰色圆形底 蓝色人形图标的效果3.1 Symbol 与 SymbolSizeSymbolint字体图标编码直接决定显示哪个图标。编码可在设计器属性面板中设置面板同时高亮展示当前Symbol与SymbolSize的值SymbolSizeint图标字号默认 45。源码在赋值时做了钳制有效范围为16 ~ 128UIAvatar.cs小于 16 会按 16 处理大于 128 按 128 处理。3.2 可视化选择图标内置图标选择器无需手查编码表UIAvatar 的Symbol属性关联了UIImagePropertyEditor类型编辑器见 UIAvatar.cs。在设计器中点击 Symbol 右侧的省略号按钮即可弹出 SunnyUI 内置的字体图标选择器操作流程为在图标选择器顶部的搜索框中按名称筛选或按分类标签浏览将鼠标移到某个图标上悬浮提示会显示该图标对应的数字编码Symbol 值点击图标即可将其设置为当前头像的Symbol。因此即使面对数百个字体图标也能通过搜索 悬停预览 点击三步快速完成配置。3.3 Symbol 模式绘制原理Icon Symbol时绘制调用的是DrawFontImageUIAvatar.cs图标按SymbolSize字号、以ForeColor为颜色绘制在头像矩形区域内并支持SymbolOffset微调位置、SymbolRotate指定旋转角度if (Icon UIIcon.Symbol) { e.Graphics.DrawFontImage(symbol, symbolSize, ForeColor, new Rectangle((Width - avatarSize) / 2 1 SymbolOffset.X, (Width - avatarSize) / 2 1 SymbolOffset.Y, avatarSize, avatarSize), 0, 0, SymbolRotate); }注意这里图标绘制区域即avatarSize对应的正方形与头像填充区域严格对齐保证图标始终居中于头像内部。四、三种显示方式图片 / 字体图标 / 文字通过Icon属性可切换头像内容取值定义在UIAvatar.UIIcon枚举中UIAvatar.cspublic enum UIIcon { Image, // 图像 Symbol, // 符号字体图标 Text // 文字 }三种方式的效果对比如下默认均为圆形4.1 图片模式Icon Image设置Image属性即可。源码在绘制时会做两项关键处理UIAvatar.cs等比缩放裁剪将图片按avatarSize比例缩放再调用Split(size, Shape)按当前形状圆形/方形裁剪成头像轮廓避免图片变形描边用 4px 宽的BackColor画笔沿头像边缘再绘制一圈轮廓让图片头像与背景自然分离Bitmap scaleImage ((Bitmap)Image).ResizeImage(...); Bitmap bmp scaleImage.Split(size, Shape); e.Graphics.DrawImage(bmp, (Width - avatarSize) / 2 1 ImageOffset.X, ...); using Pen pn new Pen(BackColor, 4); // Shape Circle : DrawEllipse // Shape Square : DrawRoundRectangle4.2 文字模式Icon Text设置Text与Font即可文字使用DrawString按ContentAlignment.MiddleCenter居中绘制在头像内UIAvatar.cs同样支持TextOffset微调位置。适合在没有真实图片、又不想用图标的场景下展示姓名缩写如示例页中的Avatar文字头像。五、显示形状圆形与方形Shape属性控制头像外轮廓枚举定义于 UImage.cspublic enum UIShape { Circle, // 圆形 Square // 方形 }对应的填充绘制逻辑在OnPaintFill中UIAvatar.csRectangle rect new Rectangle((Width - avatarSize) / 2, (Height - avatarSize) / 2, avatarSize, avatarSize); switch (Shape) { case UIShape.Circle: g.FillEllipse(fillColor, rect); // 圆形标准椭圆填充 break; case UIShape.Square: g.FillRoundRectangle(fillColor, rect, 5); // 方形圆角 5px 的圆角矩形 break; }从源码可见所谓方形实际是圆角半径为 5px 的圆角矩形观感比直角矩形更柔和。形状不仅影响背景填充还会同步作用于图片头像的裁剪轮廓Split(size, Shape)与描边方式椭圆/圆角矩形。六、主题样式与颜色联动UIAvatar 的颜色体系完全建立在 SunnyUI 的主题机制之上Style选择主题样式Blue、Orange、Purple 等控件会调用SetStyleColor(UIBaseStyle)从当前主题刷新FillColor与ForeColorUIAvatar.csStyleCustomMode置为true后脱离主题联动可自由指定FillColor、ForeColor即SymbolColor的实际渲染色进行个性化配色FillColor默认值为 Silver当设置为背景色、透明色或空值时不再填充可做纯图标/文字头像ForeColor默认值为80, 160, 255决定图标与文字的颜色。主题侧的颜色定义在 UIStyleColor.cs 中每个主题都提供AvatarFillColor与AvatarForeColor两个专用色板。例如 Blue 主题将其定义为Silver填充与PrimaryColor前景即主题主色见 UIStyleColor.cs部分深色主题则使用SelectedColor作为填充色见 UIStyleColor.cs。因此切换主题后头像会自动换色无需逐个调整。七、其他实用属性偏移、标签与缩放OffsetX / OffsetY水平/垂直整体偏移默认 0被标记为Browsable(false)主要用于运行时微调头像在布局中的视觉位置UIAvatar.csTagString用于在控件上附加任意对象字符串数据方便业务层传值PaintAgain 事件头像绘制完成后触发PaintAgain?.Invoke(this, e)见 UIAvatar.cs可用于在头像上叠加自定义绘制内容DPI 缩放SetZoomScale(float scale)会基于基准值baseAvatorSize/baseSymbolSize按比例重新计算AvatarSize与SymbolSizeUIAvatar.cs保证高分屏与窗体缩放时头像不失真。八、Demo 实战FAvatar 示例页官方示例页 FAvatar.Designer.cs 一次性演示了 UIAvatar 的典型用法共放置 6 个头像控件关键配置演示点uiAvatar1SymbolSize 48默认 Symbol 模式字体图标头像uiAvatar2Icon ImageImage Resources.SunnyUI72图片头像使用 SunnyUI72.pnguiAvatar3Icon TextText Avatar文字头像uiAvatar4Symbol 61715绑定Click事件自定义图标 点击弹菜单uiAvatar5Icon TextShape Square方形文字头像uiAvatar6SymbolSize 48Shape Square方形图标头像其中点击头像弹出右键菜单是最常见的业务场景如设置 / 更改密码 / 退出逻辑写在 FAvatar.csprivate void uiAvatar4_Click(object sender, System.EventArgs e) { uiContextMenuStrip1.Show(uiAvatar4, 0, uiAvatar4.Height); }即通过默认事件Click在头像正下方弹出UIContextMenuStrip快捷菜单整体交互与主流桌面软件的用户头像菜单一致。小结UIAvatar 是 SunnyUI 中开箱即用的头像组件Icon决定内容图片/图标/文字Shape决定轮廓圆形/圆角方形Style与FillColor/ForeColor决定配色并随主题联动Symbol 图标选择器则解决了图标选取的效率问题。配合Click默认事件、AvatarSize缩放与Offset*微调可以快速构建出风格统一、可适配高分屏的用户头像 UI。更完整的主题与字体图标背景知识可进一步参考 theme.md 与 symbol.md。赞分享UI组件桌面应用【免费下载链接】SunnyUISunnyUI.NET 是基于.NET Framework 4.0、.NET6、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。项目地址https://gitcode.com/gh_mirrors/su/SunnyUI点击查看免费下载相关推荐ngx-admin 加载状态指示器样式圆形条形脉冲ngx admin 加载状态指示器样式圆形条形脉冲 在企业级后台管理系统开发中用户操作后的加载状态反馈至关重要。ngx admin 基于 Angular 和前端UI组件clip标记形状大全圆形、方形、三角形到Unicode符号clip标记形状大全圆形、方形、三角形到Unicode符号 clip是一款强大的命令行图表生成工具能够快速创建各种专业图表。在数据可视化中标记形状是区分数SparkyFitness移动端开发揭秘React Native如何实现跨平台健康数据同步SparkyFitness移动端开发揭秘React Native如何实现跨平台健康数据同步 SparkyFitness是一款专为家庭打造的健康管理应用借助A后端前端移动开发上一篇如何快速实现文献翻译智能学术助手的完整秘籍下一篇mold 内置 oneTBB如何让 Flow Graph 绑定 task_arena 并引导任务调度到指定核心创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑