【免费下载链接】ui
A collection of accessible, headless primitives and beautifully-designed components for Blazor inspired by shadcn/ui.
做 Blazor 图表开发时,你是否也厌倦了手写冗长的 ECharts option 配置?Blazor Blueprint 是受 shadcn/ui 启发的 Blazor 可访问组件库,内置 14 种声明式组合的 ECharts 图表组件——把几个子组件嵌套在一起,就能做出支持暗色模式、自动响应的生产级 Blazor 数据可视化。
为什么选择声明式组合 API?
传统做法是把 ECharts 的 JSON option 拼成一个巨大的字符串,轴、提示框、系列全部手工配置,代码既难读又难维护。Blazor Blueprint 采用Recharts 风格的组合模式(composition pattern):图表是一个容器,坐标轴、提示框、图例、系列都是"子组件",嵌套即可生效。
<BbLineChart Data="@data" Height="300px"> <BbXAxis DataKey="month" /> <BbYAxis /> <BbChartTooltip /> <BbLine DataKey="desktop" Name="Desktop" Color="var(--chart-1)" Curve="CurveType.Smooth" /> </BbLineChart>它的背后机制很清晰(可阅读 BbChartBase.razor.cs 了解实现):
- 反射式数据绑定:
Data传入任意IEnumerable,用DataKey按属性名取值,无需手动映射 - 主题集成:系列默认使用 CSS 变量
--chart-1~--chart-5,暗色/亮色切换自动重绘 - 自动响应式:每个图表实例都挂载
ResizeObserver,窗口缩放时自动 resize - 零外部依赖:ECharts 5.5.x 已作为静态资源打包在
wwwroot/lib/echarts/echarts.min.js,不需要 CDN 或额外 NuGet 包
完整 API 文档见 Chart/README.md。
14 种 ECharts 图表组件速查表
| 图表组件 | 类型 | 最佳场景 |
|---|---|---|
BbLineChart | 折线图 | 时间趋势、增长率 |
BbAreaChart | 面积图 | 强调体量与累积量 |
BbBarChart | 柱状图 | 类别对比(支持Horizontal横向) |
BbPieChart | 饼图/环形图 | 占比构成(InnerRadius即环形) |
BbRadarChart | 雷达图 | 多维能力对比 |
BbRadialBarChart | 径向条形图 | 环形进度展示 |
BbRoseChart | 玫瑰图 | 按长度排序的排名 |
BbScatterChart | 散点图 | 相关性、分布(XDataKey+DataKey) |
BbCandlestickChart | K线图 | 金融行情 |
BbHeatmapChart | 热力图 | 强度矩阵(如时段×星期) |
BbGaugeChart | 仪表盘 | 目标完成度 |
BbFunnelChart | 漏斗图 | 转化流程 |
BbSankeyChart | 桑基图 | 流量/资金流向 |
BbMapChart | 地理地图 | 世界分区着色(内置 241 个国家边界) |
类型定义都在 Types/ 目录,可逐文件查看参数。此外还有一个"隐藏的第 15 种"——综合图容器BbChart,允许在一张图里自由混搭 Bar、Line、Area、Scatter 系列:
<BbChart Data="@data" Height="350px"> <BbXAxis DataKey="month" /> <BbYAxis /> <BbChartTooltip /> <BbBar DataKey="revenue" Name="Revenue" Color="var(--chart-1)" /> <BbLine DataKey="profit" Name="Profit" Color="var(--chart-2)" Curve="CurveType.Smooth" /> </BbChart>实现见 BbChart.cs。
快速上手:30 秒画出第一张折线图
所有图表容器共享同一组基础参数:Data(数据源)、Height、Width、Title、EnableAnimations。以月度访问数据为例:
@code { private record MonthlyData(string Month, int Desktop, int Mobile); private List<MonthlyData> data = [ new("Jan", 186, 80), new("Feb", 305, 200), new("Mar", 237, 120), new("Apr", 73, 190), new("May", 209, 130), new("Jun", 214, 140) ]; }<BbLineChart Data="@data" Height="300px"> <BbXAxis DataKey="month" /> <BbYAxis /> <BbChartTooltip /> <BbChartLegend /> <BbLine DataKey="desktop" Name="Desktop" Color="var(--chart-1)" /> <BbLine DataKey="mobile" Name="Mobile" Color="var(--chart-2)" /> </BbLineChart>注意数据只声明了一次,两条线分别用DataKey="desktop"和DataKey="mobile"指向不同属性——这正是"声明式"的含义:你描述结构,而不是拼配置。
更完整的可交互示例参考 LineChartDemo.razor,可折叠代码片段在 CodeExamples/Charts/LineChart/ 目录(default.txt、stacked.txt、step.txt等 8 种变体)。
常用子组件:坐标轴、提示框与图例
所有图表都可以嵌套这组"基础设施"子组件,它们通过CascadingValue自动注册到父图表:
| 子组件 | 常用参数 | 说明 |
|---|---|---|
BbXAxis/BbYAxis | DataKey、Type、ShowGrid、Min/Max、LabelRotate | 轴类型支持Category、Value、Time、Log |
BbChartTooltip | Indicator(Dot/Line/Dashed/None)、BackgroundColor | 悬浮提示框 |
BbChartLegend | Position(Top/Bottom/Left/Right/Hidden)、ItemGap | 图例 |
BbGrid | Left/Right/Top/Bottom、ContainLabel | 绘图区域边距 |
完整参数表见 README 参数章节。
进阶技巧:堆叠、环形中心标签与渐变填充
📊 堆叠柱状图:系列上加Stacked="true"即可,多个BbBar自动按StackGroup归组:
<BbBarChart Data="@data" Height="200px"> <BbXAxis DataKey="month" /> <BbChartTooltip /> <BbChartLegend /> <BbBar DataKey="desktop" Name="Desktop" Color="var(--chart-1)" Stacked="true" /> <BbBar DataKey="mobile" Name="Mobile" Color="var(--chart-2)" Stacked="true" BorderRadius="4" /> </BbBarChart>参考示例:stacked-legend.txt。
🍩 环形图 + 中心标签:InnerRadius="60"变环形,嵌套<BbCenterLabel>显示汇总值:
<BbPieChart Data="@data" Height="250px"> <BbChartTooltip /> <BbPie DataKey="visitors" NameKey="browser" InnerRadius="60"> <BbCenterLabel Title="Total" Value="1,234" /> </BbPie> </BbPieChart>🎨 渐变填充:系列内部可嵌套Fill → LinearGradient → GradientStop,实现从主题色淡出的高级效果:
<BbArea DataKey="desktop" Name="Desktop" Color="var(--chart-1)" Curve="CurveType.Smooth"> <BbFill> <BbLinearGradient Direction="GradientDirection.Vertical"> <BbGradientStop Offset="0" Color="var(--chart-1)" Opacity="0.8" /> <BbGradientStop Offset="1" Color="var(--chart-1)" Opacity="0.1" /> </BbLinearGradient> </BbFill> </BbArea>值得尝试的三种特色图表
🗺️ MapChart:开箱即用的世界地图。内置 Natural Earth 数据集的 241 个国家边界,无需 API Key、无需外部地图服务:
<BbMapChart Data="@visitors" Height="420px" OnDataPointClick="SelectCountry"> <BbChartTooltip /> <BbMap CountryKey="Country" DataKey="Visitors" Name="Visitors" /> </BbMapChart>配合<BbVisualMap>可固定颜色区间,让多张地图跨期可比;Roam="true"开启缩放平移。地图资源说明见 maps/README.md。
🌊 SankeyChart:桑基流向图。直接绑定"链接"集合(源、目标、值三列),节点列表自动从名称派生:
<BbSankeyChart Data="@flows" Height="320px"> <BbChartTooltip /> <BbSankey SourceKey="from" TargetKey="to" DataKey="value" /> </BbSankeyChart>它还做了贴心防护:若链接构成环(ECharts 会直接抛错导致整图空白),会自动丢弃成环的那条链接并正常绘制其余部分。
📈 CandlestickChart:金融 K 线图。内置涨跌配色与网格样式,适合行情类看板,示例见 CandlestickChartDemo.razor。
暗色模式与响应式:完全零配置
这是整套图表最"省心"的地方,你几乎不需要写任何额外代码:
- 主题色自动解析:ECharts 原生不支持 CSS
var(),chart-theme.js会在运行时通过getComputedStyle()把--chart-1~--chart-5解析为具体色值(连 OKLCH 颜色也能正确转换) - 主题切换自动重绘:
MutationObserver监听<html>类名变化,切换暗色/亮色时所有图表即时重渲染 - 窗口缩放自适应:每个图表实例独立挂载
ResizeObserver - 统一卡片容器:
BbChartContainer提供 Card 风格的标题 + 副标题 + 图表布局,整页观感一致
系列未显式指定Color时,会按出现顺序自动分配--chart-1~--chart-5,因此多系列图表开箱就配色协调。
相关目录与文件资料
| 路径 | 说明 |
|---|---|
| Chart/README.md | 图表系统完整文档(架构、全部参数表、主题机制) |
| Types/ | 14 种图表 + 综合图容器BbChart |
| Series/ | 系列组件:BbLine、BbBar、BbPie、BbRose、BbSankey等 |
| Composables/ | BbXAxis、BbYAxis、BbChartTooltip、BbChartLegend、BbGrid |
| Core/BbChartBase.razor | 图表基类:JS 互操作与子组件注册 |
| CodeExamples/Charts/ | 全部 14 种图表的可复制示例片段(100+ 个 .txt 变体) |
| Pages/Charts/ | 15 个可交互演示页(含 CompositeChart 综合图) |
小结
Blazor Blueprint 把 ECharts 封装成了一套"嵌套子组件即配置"的 Blazor 图表 API:14 种常用图表类型全覆盖,数据绑定靠DataKey一行搞定,主题、暗色模式、响应式全部自动化。对于需要 Blazor 数据可视化方案的团队,这套声明式组合 API 是少见的"学习成本低、视觉产出高"的选择——先跑通 LineChartDemo.razor 里的第一个折线图,剩下的就是按需挑组件了。
【免费下载链接】ui
A collection of accessible, headless primitives and beautifully-designed components for Blazor inspired by shadcn/ui.
相关推荐
Blazor 表单系统实战指南:Blazor Blueprint 的 30+ FormField 组件与 EditForm 集成的完整教程
Blazor 表单系统实战指南:Blazor Blueprint 的 30+ FormField 组件与 EditForm 集成的完整教程 在 Blazor 应
如何用Radzen Blazor打造专业数据可视化:面积图、雷达图完全指南
如何用Radzen Blazor打造专业数据可视化:面积图、雷达图完全指南 Radzen Blazor是一套包含70多个免费原生Blazor UI组件的强大工具
REA 逆向分析技能一键安装:四步让 AI 编码助手读懂二进制与 APK
REA 逆向分析技能一键安装:四步让 AI 编码助手读懂二进制与 APK REA(Reverse Engineer Anything)是一个一键安装的逆向分析技
逆向工程MCP 服务AI 技能
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考