当前位置: 首页 > 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

相关文章:

LiveCharts.WPF图表模块封装

WPF LiveCharts.WPF 封装实现 下面是一个完整的 WPF LiveCharts.WPF 封装实现,提供了常用图表的简单使用方式,并支持数据绑定和更新。 一、LiveCharts.WPF 封装类 1. 图表基类 (ChartBase.cs) using LiveCharts; using LiveCharts.Wpf; using System.Collections.Generic;…...

微信小程序,基于uni-app的轮播图制作,轮播图本地文件图片预览

完整代码 <template><swiper class"banner" indicator-dots circular :autoplay"false"><swiper-item v-for "item in picture" :key"item.id"><view><image tap"onPreviewImage(item.img)" :…...

【QQmusic】复习笔记第四章分点讲解

4.1 音乐加载 功能概述 该部分实现了从本地磁盘加载音乐文件到程序中&#xff0c;并在界面上显示的功能。通过QFileDialog类创建文件选择对话框&#xff0c;用户可选择多个音乐文件&#xff0c;程序筛选出有效音频文件后&#xff0c;交由MusicList类管理&#xff0c;并更新到…...

设置右键打开VSCode

在日常的开发工作中&#xff0c;VSCode 是一款非常受欢迎的代码编辑器。为了更加便捷地使用它&#xff0c;我们可以将 VSCode 添加到右键菜单中&#xff0c;这样只需右键点击文件或文件夹&#xff0c;就能快速用 VSCode 打开&#xff0c;极大地提高工作效率。下面我就来介绍一下…...

数据结构和算法(八)--2-3查找树

目录 一、平衡树 1、2-3查找树 1.1、定义 1.2、查找 1.3、插入 1.3.1、向2-结点中插入新键 1.3.2、向一棵只含有一个3-结点的树中插入新键 1.3.3、向一个父结点为2-结点的3-结点中插入新键 1.3.4、向一个父结点为3-结点的3-结点中插入新键 1.3.5、分解根结点 1.4、2…...

JSAPI2.4——正则表达式

一、语法 const str 一二三四五六七八九十 //判断内容 const reg /二/ //判断条件 console.log(reg.test(str)); //检查 二、test与exec方法的区别 test方法&#xff1a;用于判断是否符合规则的字符串&#xff0c;返回值是布尔值 exec方法&…...

FPGA 100G UDP纯逻辑协议栈

随着器件等级的升高&#xff0c;高速serdes的线速率也随之提高&#xff0c;RFSOC 4x最大可支持100G&#xff0c;主流方案为RDMA方案&#xff0c;该方案相对比较复杂&#xff0c;除了需要负责逻辑端的开发&#xff0c;还需操作系统中开发RDMA的驱动&#xff0c;对于对丢包不那么…...

分享一个可以批量巡检GET和POST接口的Shell脚本

一、场景痛点与需求分析 在分布式系统架构中&#xff0c;服务接口的可用性和稳定性直接影响业务连续性。当面临以下场景时&#xff0c;需批量巡检GET和POST接口&#xff1a; 上线验证&#xff1a;新版本发布后批量验证核心接口 故障恢复&#xff1a;异常数据修复后的批量重试…...

机器学习之一:机械式学习

正如人们有各种各样的学习方法一样&#xff0c;机器学习也有多种学习方法。若按学习时所用的方法进行分类&#xff0c;则机器学习可分为机械式学习、指导式学习、示例学习、类比学习、解释学习等。这是温斯顿在1977年提出的一种分类方法。 有关机器学习的基本概念&#xff0c;…...

区分PROJECT_SOURCE_DIR, CMAKE_SOURCE_DIR,CMAKE_CURRENT_SOURCE_DIR

目录 示例工程 PROJECT_SOURCE_DIR的行为 CMAKE_SOURCE_DIR的行为 CMAKE_CURRENT_SOURCE_DIR 示例工程 根目录 |-----CMakeLists.txt |-----sub1 |--------CMakeLists.txt |-----sub2 |--------CMakeLists.txt 根目录下的CMakeList.txt: project(main)message("main …...

Python循环结构深度解析与高效应用实践

引言&#xff1a;循环结构在编程中的核心地位 循环结构作为程序设计的三大基本结构之一&#xff0c;在Python中通过while和for-in两种循环机制实现迭代操作。本文将从底层原理到高级应用&#xff0c;全面剖析Python循环机制的使用技巧与优化策略&#xff0c;助您掌握高效迭代的…...

25【干货】在Arcgis中根据字段属性重新排序并自动编号的方法(二)

上一篇关于属性表自动编号的文章因为涉及到代码&#xff08;【干货】在Arcgis中根据字段属性重新排序并自动编号的方法&#xff08;一&#xff09;&#xff09;&#xff0c;担心大家有些东西确实不熟悉&#xff0c;今天就更新一篇不需要代码也能达到这个目的的方法。主要的思路…...

SinSR模型剪枝实验报告

SinSR模型剪枝实验报告 实验概述 我成功地对SinSR模型进行了L1范式剪枝&#xff0c;剪枝比例为50%。通过分析剪枝前后的模型参数和性能&#xff0c;我们得出了以下结论。 剪枝实现方法 创建专用的main_prune.py脚本&#xff0c;用于剪枝训练。创建quick_prune.py脚本&#…...

IT社团分析预测项目(pandas、numpy、sklearn)

IT社团人数的增长陷入迟滞&#xff0c;同时不同目标任务和不同经营模式的社团更是层出不穷。在面临内忧外患的情况下&#xff0c;本社团希望结合社团行业现状&#xff0c;分析同学和出勤的数据&#xff0c;挖据数据中的信息&#xff0c;通过对人数流失进行预测寻找到相应的对策…...

C语言中位段的应用

一&#xff0c;位段的主要应用场景 硬件寄存器操作 嵌入式开发中&#xff0c;硬件寄存器通常以位为单位控制设备状态。位段可直接映射到寄存器&#xff0c;简化位操作&#xff1a; typedef struct {unsigned int enable : 1; // 使能位unsigned int mode : 3; // 模式选择&…...

【Linux网络#1】:网络基础知识

1、网络发展 在计算机发展历程中&#xff0c;经历过下面四个阶段&#xff1a; 1.独立模式 独立模式&#xff1a;计算机之间相互独立&#xff0c;每台计算机做自己的事情&#xff0c;彼此之间没有直接信息传递。如果两台计算机需要通信就需要将当前计算机的数据通过某种方式拷贝…...

基于物联网的园林防火监测系统

标题:基于物联网的园林防火监测系统 内容:1.摘要 随着全球气候变化和人类活动影响&#xff0c;园林火灾发生频率呈上升趋势&#xff0c;给生态环境和人类生命财产造成巨大损失。为有效预防和应对园林火灾&#xff0c;本文提出基于物联网的园林防火监测系统。该系统综合运用传感…...

华为云loT物联网介绍与使用

&#x1f310; 华为云 IoT 物联网平台详解&#xff1a;构建万物互联的智能底座 随着万物互联时代的到来&#xff0c;物联网&#xff08;IoT&#xff09;已成为推动数字化转型的关键技术之一。华为云 IoT 平台&#xff08;IoT Device Access&#xff09;作为华为云的核心服务之…...

Redis 数据类型全览:特性、场景与操作实例

Redis 是一款开源的内存数据库&#xff0c;支持多种数据类型&#xff0c;以下是对常见 Redis 数据类型的介绍&#xff1a; 1. String&#xff08;字符串&#xff09; 描述 字符串是 Redis 里最基础的数据类型&#xff0c;其值可以是简单的字符串、数字&#xff0c;甚至是二进…...

Qt动态库信号崩溃问题解决方案

在Qt中&#xff0c;当动态库向主程序发送信号导致崩溃时&#xff0c;通常涉及线程安全或对象生命周期问题。以下是逐步解决方案&#xff1a; 1. 检查线程上下文 问题&#xff1a;动态库所在的线程与主程序线程不同&#xff0c;跨线程信号未正确处理。解决方案&#xff1a; 显式…...

Go设计模式-观察者模式

简介 在软件开发中&#xff0c;我们常常会遇到这样的场景&#xff1a;一个对象的状态变化需要通知到多个其他对象&#xff0c;让它们做出相应的反应。观察者模式&#xff08;Observer Pattern&#xff09;就是解决这类问题的一种设计模式。在 Go 语言中&#xff0c;由于其简洁…...

《TCP/IP详解 卷1:协议》之第七、八章:Ping Traceroute

目录 一、ICMP回显请求和回显应答 1、ICMP回显请求 2、ICMP回显应答 二、ARP高速缓存 三、IP记录路由选项&#xff08;Record Route&#xff0c;RR&#xff09; 1、记录路由选项的工作过程 2、RR 选项的 IP 头部格式 2.1、RR 请求 2.2、RR响应 四、ping 的去返路径 五…...

Unity任务系统笔记

数据结构设计 任务基类包括的字段&#xff1a; string 任务内容&#xff1b; Transform 任务目的地&#xff1b; MyCharacter 任务开启后要更新对话的NPC&#xff1b; MyTalkData 任务开启后相关NPC要说的对话数据&#xff1b; 共同方法&#xff1a;开启任务、完成任务。…...

Three.js + React 实战系列-3D 个人主页:构建 Hero 场景组件(项目核心)✨

在本节中&#xff0c;我们将完成整个 3D 主业项目中最核心的组件 —— Hero.jsx。 这个组件作为首页的主视觉部分&#xff0c;整合了 3D 模型、动画相机、交互按钮与自适应布局&#xff0c;构建出一个立体、酷炫、可交互的主场景。 前置准备&#xff1a; ✅安装依赖&#xff…...

线程池(二):深入剖析synchronized关键字的底层原理

线程池&#xff08;二&#xff09;&#xff1a;深入剖析synchronized关键字的底层原理 线程池&#xff08;二&#xff09;&#xff1a;深入剖析synchronized关键字的底层原理一、基本使用1.1 修饰实例方法1.2 修饰静态方法1.3 修饰代码块 二、Monitor2.1 Monitor的概念2.2 Moni…...

网络原理 - 9

目录 数据链路层 以太网 以太网帧格式 MAC 地址 DNS&#xff08;Domain Name System&#xff09; 完&#xff01; 数据链路层 这里的内容也是简单了解&#xff0c;除非是做交换机开发&#xff0c;一般程序员不需要涉及~~ 以太网 ”以太网“不是一种具体的网络&#xf…...

springboot入门-业务逻辑核心service层

在 Spring Boot 中&#xff0c;Service 层是业务逻辑的核心&#xff0c;负责协调数据访问层&#xff08;Repository 或 Mapper&#xff09;和控制器层&#xff08;Controller&#xff09;&#xff0c;处理业务规则、事务管理以及数据转换。以下是 Service 层的详细说明、常用注…...

在RHEL 10上安装和配置TFTP服务器(不使用xinetd)

RHEL10已经废弃xinetd&#xff0c;使用下面的方式安装配置TFTP服务器。 1. 安装TFTP服务器和客户端 sudo dnf install tftp-server tftp -y 2. 配置TFTP服务器 创建TFTP根目录并设置权限 sudo mkdir -p /var/lib/tftpboot sudo chmod -R 777 /var/lib/tftpboot sudo chown -R…...

AIGC在游戏开发中的革命:自动化生成3A级游戏内容

一、智能游戏开发架构 1.1 传统开发痛点与AIGC创新 开发环节 传统痛点 AIGC解决方案 角色原画设计 美术资源产能瓶颈 文生图3D模型自动生成 场景搭建 重复劳动占比高 程序化生成风格迁移 NPC行为设计 模式化严重 强化学习驱动智能行为 任务系统 剧情线性缺乏变化 动态剧情生成系…...

ChatGPT、deepseek、豆包、Kimi、通义千问、腾讯元宝、文心一言、智谱清言代码能力对比

均使用测试时的最强模型 均是一次对话,对话内容一样 均开启深度思考 能联网的都联网了&#xff0c;但是作用不大&#xff0c;因为蓝桥杯刚考完&#xff0c;洛谷题目刚上传没多久 问题一测试了两遍 从问题三开始不再测试智谱清言&#xff08;它思考时间太长了&#xff0c;前两个…...

Linux扩展

目录 扩展 查找如何进行后台运行程序的指令 使用 & 符号 使用 nohup 命令 使用 screen 或 tmux find命令 基本语法 常用选项 grep 命令 基本语法 常用选项 如何使用 vim 直接定位到错误行 1. 使用 :make 和 :copen 2. 使用 :lineno 定位 3. 通过 :grep 或 :…...

Java Hotspot VM researcher

** therefore, careful design and understanding of modules are essential to fully reap the performance benefits. **...

java—基础

目标 ├── 第一阶段&#xff1a;内容清单 │ └── 目标&#xff1a;建立编程思想 ├── 第二阶段&#xff1a;内容清单 │ └── 目标&#xff1a;提升编程能力 └── 第三阶段&#xff1a;内容清单└── 目标&#xff1a;分析需求&#xff0c;代码实现能力以下是根…...

【OpenCV】第二章——图像处理基础

图像处理基础学习笔记 本章节详细介绍了图像处理的基础内容&#xff0c;包括图像的读取、显示、保存&#xff0c;基本属性的查看&#xff0c;图像的变换与操作&#xff0c;以及常用的图像处理方法。 目录 图像的读取与显示图像基本属性图像的灰度化与二值化图像的色彩空间转换…...

在WSL2+Ubuntu22.04中通过conda pack导出一个conda环境包,然后尝试导入该环境包

如何导出一个离线conda环境&#xff1f;有两种方式&#xff0c;一种是导出env.yml即环境配置&#xff0c;一种是通过conda pack导出为一个环境包&#xff0c;前者只是导出配置&#xff08;包括包名、版本等&#xff09;&#xff0c;而后者是直接将环境中所有的内容打包&#xf…...

C++:类和对象(上)---镜中万象:C++类的抽象之境与对象的具体之象

类&#xff08;Class&#xff09;是一种用户自定义的数据类型。 文章目录&#xff1a; 前言一、面向过程和面向对象初步认识 二、类的引入 三、类的定义 3.1类是什么&#xff1f; 3.2类的定义 四、类的访问限定符和封装 4.1类的访问限定符 4.2封装 五、类和对象的关系 六、类对…...

碰一碰发视频源码搭建全解析,支持OEM

在数字化交互体验不断升级的背景下&#xff0c;“碰一碰发视频” 功能凭借其便捷性和趣味性&#xff0c;逐渐成为营销推广、社交分享等场景中的热门需求。该功能基于近场通信技术&#xff0c;实现设备间快速的数据传输。本文将详细介绍其源码搭建过程&#xff0c;助力开发者实现…...

搭建spark-local模式

要搭建Spark的local模式&#xff0c;你可以按照以下步骤进行操作&#xff08;以在Linux系统上安装为例&#xff0c;假设你已经安装了Java环境&#xff09;&#xff1a; 1. 下载Spark安装包&#xff1a;访问Spark官方网站&#xff08;https://spark.apache.org/downloads.html&a…...

Goland终端PowerShell命令失效

Goland终端Terminal的PowerShell不能使用&#xff0c;明明windows上升级了PowerShell 7设置了配置文件&#xff0c;但是只能在windows终端下使用&#xff0c;goland终端下直接失效报错&#xff0c;安装升级PowerShell请看[博客](Windows11终端升级PowerShell7 - HashFlag - 博客…...

前端节流、防抖函数

节流 什么是节流&#xff1f; 节流就是同一个事件 一秒钟他执行了很多次。但是我不想他执行这么多次&#xff0c;我只想让他执行一次 或者两次。 那该怎么办&#xff1f; why baby why 那我想就是他执行的时候 我就设置一个定时器&#xff0c;如果定时器是空的&#xff0c;等会…...

如何使用WebRTC

WebRTC比较容易使用&#xff0c;只需要很少的步骤&#xff0c;有些消息在浏览器和服务器之间流动&#xff0c;有些则直接在两个浏览器之间流动&#xff0c; 1、建立WebRTC会话 a&#xff1a;建立WebRTC连接需要加入以下几个步骤&#xff1a; 获取本地媒体&#xff1a;getUse…...

在 Vue 3 setup() 函数中使用 TypeScript 处理 null 和 undefined 的最佳实践

在 Vue 3 中使用 setup() 函数和 TypeScript 时&#xff0c;null 和 undefined 是两个需要特别关注的类型。虽然它们看起来都表示“没有值”&#xff0c;但它们在 JavaScript 和 TypeScript 中有着不同的含义和使用场景。如果不小心处理它们&#xff0c;可能会导致潜在的 bug 或…...

【C++11】Lambda表达式

前言 上文我们学习了C11新语法&#xff0c;可变参数模板以及用可变参数模板作为形参的emplace接口。【C11】可变参数模板-CSDN博客 本文我们来学习C11下一个新语法&#xff0c;Lambda表达式。 1.Lambda表达式语法 Lambda表达式本质是一个匿名函数对象&#xff0c;与普通函数不同…...

【落羽的落羽 C++】vector

文章目录 一、vector类介绍二、vector中的常用接口三、迭代器失效问题四、vector的使用实例五、vector模拟实现 一、vector类介绍 vector是STL中的一种容器&#xff0c;本质上是顺序表。它和string类的结构很相似&#xff0c;其也有size、capacity、数组等&#xff0c;不同的是…...

DIFY 浅尝 - Dify + Ollama 抓取BBC新闻

假设你已经按照上篇文章 DIFY 浅尝 - DIFY Ollama 添加模型搭建好了本地环境. 创建一个新的工作流 进入你的本地Dify工作台&#xff0c;选择工作室->创建空白应用 选择工作流&#xff0c;输入应用名称BBC旅游新闻&#xff0c;点击创建 创建一个网页爬虫 配置网页爬虫…...

基于MTF的1D-2D-CNN-BiLSTM-Attention时序图像多模态融合的故障分类识别(Matlab完整源码和数据),适合研究学习,附模型研究报告

基于MTF的1D-2D-CNN-BiLSTM-Attention时序图像多模态融合的故障分类识别&#xff08;Matlab完整源码和数据&#xff09;&#xff0c;适合研究学习&#xff0c;附模型研究报告 目录 基于MTF的1D-2D-CNN-BiLSTM-Attention时序图像多模态融合的故障分类识别&#xff08;Matlab完整…...

nuxt3项目搭建:一、初始化项目流程指南

一、初始化项目 初始化命令 1、创建nuxt3项目 npm create nuxtlatest2、填写项目名称 这里我直接填了nuxt-app 3、选择包管理器 这里的包管理器我们选择pnpm 4、选择是否创建git仓库 选择完包管理器后&#xff0c;脚手架会自动下载依赖&#xff0c;git仓库我已经创建好了…...

案例速成GO+redis 个人笔记

更多个人笔记&#xff1a;&#xff08;仅供参考&#xff0c;非盈利&#xff09; gitee&#xff1a; https://gitee.com/harryhack/it_note github&#xff1a; https://github.com/ZHLOVEYY/IT_note &#xff08;更多GOredis等见内部&#xff0c;会及时更新&#xff5e;&#x…...

C/C++ 头文件包含机制:从语法到最佳实践

在C/C++编程中,头文件(.h 或 .hpp)扮演着至关重要的角色。它们不仅是代码模块化的基石,更是编译器理解程序结构的关键。然而,头文件的使用看似简单,实则暗含许多细节,稍有不慎便可能导致编译错误、代码冗余,甚至隐藏难以调试的问题。本文将从语法、编译器行为到工程实践…...

职业教育新形态数字教材的建设与应用:重构教育生态的数字化革命

教育部新时代职业学校名师(名匠)名校长培养计划、四川省第四批职业学校名师(名匠)培养计划专题 在某职业院校的智能制造课堂上&#xff0c;学生佩戴VR设备&#xff0c;通过数字教材中的虚拟工厂完成设备装配训练&#xff0c;系统实时生成操作评分与改进建议。这一场景折射出职业…...