当前位置: 首页 > news >正文

LiveCharts.WPF图表模块封装

WPF LiveCharts.WPF 封装实现

下面是一个完整的 WPF LiveCharts.WPF 封装实现,提供了常用图表的简单使用方式,并支持数据绑定和更新。

一、LiveCharts.WPF 封装类

1. 图表基类 (ChartBase.cs)

 
using LiveCharts;
using LiveCharts.Wpf;
using System.Collections.Generic;
using System.Windows.Controls;
using System.Windows.Media;namespace WpfSupervisor.Charts
{public abstract class ChartBase : UserControl{protected ChartValues<double> _chartValues = new ChartValues<double>();protected SeriesCollection _seriesCollection = new SeriesCollection();protected LiveCharts.Wpf.Axis _xAxis = new LiveCharts.Wpf.Axis();protected LiveCharts.Wpf.Axis _yAxis = new LiveCharts.Wpf.Axis();static ChartBase(){// 设置默认样式DefaultStyles.Initialize();}public ChartBase(){InitializeComponent();SetupChart();}protected abstract void InitializeComponent();protected abstract void SetupChart();public void UpdateData(IEnumerable<double> newData){_chartValues.Clear();foreach (var value in newData){_chartValues.Add(value);}OnPropertyChanged(nameof(ChartValues));}public void AddDataPoint(double value){_chartValues.Add(value);OnPropertyChanged(nameof(ChartValues));}public void ClearData(){_chartValues.Clear();OnPropertyChanged(nameof(ChartValues));}public SeriesCollection SeriesCollection{get => _seriesCollection;set{_seriesCollection = value;OnPropertyChanged(nameof(SeriesCollection));}}public ChartValues<double> ChartValues{get => _chartValues;set{_chartValues = value;OnPropertyChanged(nameof(ChartValues));}}public LiveCharts.Wpf.Axis XAxis{get => _xAxis;set{_xAxis = value;OnPropertyChanged(nameof(XAxis));}}public LiveCharts.Wpf.Axis YAxis{get => _yAxis;set{_yAxis = value;OnPropertyChanged(nameof(YAxis));}}public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));}}
}

2. 折线图封装 (LineChartControl.xaml & LineChartControl.xaml.cs)

​LineChartControl.xaml​

 
<UserControl x:Class="WpfSupervisor.Charts.LineChartControl"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"xmlns:local="clr-namespace:WpfSupervisor.Charts"x:Name="root"><lvc:CartesianChart Series="{Binding SeriesCollection, ElementName=root}" Axes="{Binding Axes, ElementName=root}"LegendLocation="Right"Hoverable="False"DataTooltip="{x:Null}"><lvc:CartesianChart.ChartLegend><lvc:DefaultLegend BulletSize="10" /></lvc:CartesianChart.ChartLegend><lvc:CartesianChart.Zoom><lvc:ZoomingOptions ZoomMode="X" /></lvc:CartesianChart.Zoom></lvc:CartesianChart>
</UserControl>

​LineChartControl.xaml.cs​

 
using LiveCharts;
using LiveCharts.Wpf;
using System.Collections.Generic;
using System.Windows.Controls;
using System.Windows.Media;namespace WpfSupervisor.Charts
{public partial class LineChartControl : ChartBase{public static readonly DependencyProperty TitleProperty =DependencyProperty.Register("Title", typeof(string), typeof(LineChartControl), new PropertyMetadata("折线图", OnTitleChanged));public static readonly DependencyProperty LineColorProperty =DependencyProperty.Register("LineColor", typeof(Brush), typeof(LineChartControl), new PropertyMetadata(new SolidColorBrush(Colors.Blue), OnLineColorChanged));public string Title{get => (string)GetValue(TitleProperty);set => SetValue(TitleProperty, value);}public Brush LineColor{get => (Brush)GetValue(LineColorProperty);set => SetValue(LineColorProperty, value);}public LineChartControl(){InitializeComponent();}protected override void InitializeComponent(){// 已在XAML中定义}protected override void SetupChart(){_seriesCollection = new SeriesCollection{new LineSeries{Title = Title,Values = ChartValues,PointGeometrySize = 5,Stroke = LineColor,Fill = Brushes.Transparent}};_xAxis = new LiveCha

相关文章:

  • 前端面试宝典---vue原理
  • arduino显示数码管1~9
  • 如何解决IDE项目启动报错 error:0308010C:digital envelope routines::unsupported 问题
  • 【SwitchyOmega安装教程】
  • 案例速成GO+redis 个人笔记
  • Llama factory如何全参数微调 Qwen2.5-7B-Instruct 模型并导入Ollama推理(详细版)
  • spark总结
  • uniapp开发04-scroll-view组件的简单案例
  • 启动命令汇总(Redis / Kafka / Flume / Spark)
  • DIFY 浅尝 - Dify + Ollama 抓取BBC新闻
  • Java学习手册:常用的内置工具类包
  • 云原生--核心组件-容器篇-3-Docker三大核心之--镜像
  • elk中kibana一直处于可用和降级之间且es群集状态并没有问题的解决方法
  • 从 Vue 到 React:React 合成事件
  • 使用 AFL++ 对 IoT 二进制文件进行模糊测试 - 第一部分
  • Linux之netlink(2)libnl使用介绍(1)
  • Redis 数据类型全览:特性、场景与操作实例
  • 【Hive入门】Hive动态分区与静态分区:使用场景与性能对比完全指南
  • 游戏引擎学习第245天:wglChoosePixelFormatARB
  • 写入cache时数据格式错误产生的ERRO导致整个测试框架无法运行
  • 央行副行长:研究建立民营中小企业增信制度,破解民营中小企业信用不足等融资制约
  • 国内生产、境外“游一圈”再进保税仓,这些“全球购”保健品竟是假进口
  • 洛阳原副市长收礼品消费卡,河南通报6起违反八项规定典型问题
  • 为国出征指纹却无法识别?他刷新了我军在这一项目的最好成绩
  • 天问三号开放20千克质量资源,邀国际合作开展火星探测研究
  • “全国十大考古”揭晓:盘龙城遗址、周原遗址入围