WPF曲线自定义控件 - CurveHelper

发布于:2025-09-06 ⋅ 阅读:(19) ⋅ 点赞:(0)

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)


网站公告

今日签到

点亮在社区的每一天
去签到