CurveHelper
是一个轻量级、高性能的 WPF 自定义曲线图控件库,提供 CurveControl
控件,支持:
- ✅ 自定义 X/Y 轴标题、范围、刻度
- ✅ 手动设置 X 轴标签(如日期、字符串)
- ✅ 多曲线绘制,支持颜色自定义
- ✅ 数据动态绑定与更新
- ✅ 控件大小自适应,支持拖拽缩放(可选)
使用,搜索 CurveHelper(推荐)
1 右击项目=》点击“管理Nuget程序包”。
dotnet add package CurveHelper
🚀 快速使用:在 WPF 项目中绘制曲线图
1 如何调用参考 创建wpf项目,在MainWindow.cs加入下面的代码
<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CurveHelper 示例" Height="600" Width="800">
<Grid Name="mainGrid">
<!-- CurveControl 将在此处动态添加 -->
</Grid>
</Window>
using System;
using System.Linq;
using System.Windows;
using System.Windows.Media;
using CurveHelper; // 确保引用命名空间
namespace WpfApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
InitializeCurveControl();
}
private void InitializeCurveControl()
{
// 生成随机数据(模拟 107 天)
var random = new Random();
double[] curve1Data = Enumerable.Range(0, 107)
.Select(_ => random.NextDouble() * 900) // 0 ~ 900
.ToArray();
double[] curve2Data = Enumerable.Range(0, 107)
.Select(_ => random.NextDouble() * 100) // 0 ~ 100
.ToArray();
// 生成 X 轴标签:A1天, A2天, ..., A107天
string[] xLabels = Enumerable.Range(1, 107)
.Select(i => $"A{i}天")
.ToArray();
// 使用流畅 API 构建并渲染曲线图
CurveControlBuilder.Create()
.WithAxis("日期", "数值")
.WithYRange(0, 1000, 50)
.WithXLabels(xLabels) // 注意:这里使用的是文本标签,不是日期
.AddCurve("曲线1", curve1Data, Brushes.Red)
.AddCurve("曲线2", curve2Data, Brushes.Blue)
.RenderTo(mainGrid);
}
}
}
📸 效果展示
🎨 参数解释说明
Create()
作用:静态工厂方法,创建一个新的 CurveControlBuilder 实例。
返回值:CurveControlBuilder
示例:
CurveControlBuilder.Create()
WithAxis(string xAxisLabel, string yAxisLabel)
作用:设置坐标轴的标签。
参数:
xAxisLabel:X 轴标签(如 "日期")
yAxisLabel:Y 轴标签(如 "温度 (°C)")
返回值:this(支持链式调用)
示例:
.WithAxis("时间", "销售额")
WithYRange(double min, double max, double interval)
作用:手动设置 Y 轴的显示范围和刻度间隔。
参数:
min:Y 轴最小值
max:Y 轴最大值
interval:主刻度间隔
返回值:this
注意:若不调用此方法,Y 轴将自动根据数据范围动态调整。
示例:
.WithYRange(0, 1000, 50) // 显示 0~1000,每 50 一个刻度
WithXLabels(IEnumerable<string> labels)
作用:为 X 轴设置文本标签(如日期、类别等)。
参数:
labels:字符串集合,长度应与数据点数量一致
返回值:this
示例:
var days = new[] { "周一", "周二", "周三", "周四", "周五" };
.WithXLabels(days)
WithXLabelsFromDates(IEnumerable<DateTime> dates)
作用:从 DateTime 集合自动生成 X 轴标签(格式:MM-dd 或 HH:mm)。
参数:
dates:日期时间集合
返回值:this
智能格式:
若跨天:显示 MM-dd
若同一天:显示 HH:mm
示例:
.WithXLabelsFromDates(hourlyData.Select(d => d.Timestamp))
AddCurve(string name, IEnumerable<double> yValues, Brush color)
作用:添加一条曲线数据。
参数:
name:曲线名称(显示在信息框中)
yValues:Y 值集合(X 轴默认等距分布)
color:曲线颜色(如 Brushes.Red, new SolidColorBrush(Colors.Blue))
返回值:this
说明:可多次调用以添加多条曲线。
示例:
.AddCurve("室温", temperatures, Brushes.Red)
.AddCurve("湿度", humidity, Brushes.Blue)
RenderTo(Panel container)
作用:将最终构建好的曲线控件添加到指定的 WPF 容器中,并完成渲染。
参数:
container:WPF 面板(如 Grid, StackPanel, Canvas 等)
返回值:无
行为:
清空容器原有子元素(可配置)
添加新创建的 CurveControl 实例
示例:
.RenderTo(mainGrid)