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

WPF Live Charts2 自学笔记

文章目录

  • 前言
    • 实现效果
    • 微软平台的历史问题
  • WPF 项目搭建
    • Nuget添加
    • 额外框架添加
    • 项目初始化
    • livecharts配置
    • 其它LiveCharts2 案例
    • 简单案例Demo示例
      • View
      • ViewModel
    • GPU渲染
  • Github地址仓库

前言

LiveChart 是C# 上面很受欢迎的统计图 UI控件。最近在学WPF+halcon开发,想想还是把LiveCharts 也顺便学一下

LiveCharts2 官网

LiveCharts2 WPF 平台官方文档

Gitee仓库地址 gclove2000 / WPF_LiveCharts2

在这里插入图片描述

实现效果

在这里插入图片描述

微软平台的历史问题

微软推出这么多UI框架干嘛。我希望MAUI在5年内不变。先把跨平台的问题解决好。
在这里插入图片描述

WPF 项目搭建

Nuget添加

注意:Livecharts2 目前是预览版,所以需要在搜索的时候添加预览版选项
在这里插入图片描述

LiveChartsCore.SkiaSharpView.WPF

在这里插入图片描述

额外框架添加

在这里插入图片描述

WPF Prims框架详解

WPF CommunityToolkit.Mvvm

项目初始化

按照案例运行完美成功!

ViewModel属性添加

using LiveChartsCore;
using LiveChartsCore.SkiaSharpView;namespace WpfSample
{public class ViewModel{public ISeries[] Series { get; set; } = new ISeries[]{new LineSeries<double>{Values = new double[] { 2, 1, 3, 5, 3, 4, 6 },Fill = null}};}
}

xml添加

<Window x:Class="MyApp"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WPFSample"xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"><Window.DataContext><local:ViewModel /></Window.DataContext><lvc:CartesianChartSeries="{Binding Series}"></lvc:CartesianChart></Window>

在这里插入图片描述
运行效果
在这里插入图片描述

livecharts配置

看不懂,暂时不用
在这里插入图片描述

其它LiveCharts2 案例

我们可以在LiveCharts2的Example里面选择案例
常用的:条形图,柱状图,雷达塔,世界地图等都有,而且都有对应的动态动画
在这里插入图片描述
在这里插入图片描述

简单案例Demo示例

在这里插入图片描述

View

<UserControl x:Class="BlankApp1.Views.AView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:BlankApp1.Views"xmlns:ViewModel="clr-namespace:BlankApp1.ViewModels"xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"mc:Ignorable="d"d:DesignHeight="450"d:DesignWidth="800"><UserControl.DataContext><ViewModel:AViewModel /></UserControl.DataContext><Grid><Grid.RowDefinitions><RowDefinition /><RowDefinition /></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><lvc:CartesianChart Series="{Binding Series}"Grid.Row="0"Grid.Column="0" /><lvc:CartesianChart Series="{Binding Series2}"Grid.Row="0"Grid.Column="1"YAxes="{Binding YAxes2}" /><lvc:PieChart Series="{Binding Series3}"Grid.Row="1"Grid.Column="0"Title="{Binding Title3}"></lvc:PieChart><lvc:PieChart Grid.Row="1"Grid.Column="1"Series="{Binding Series4}" /></Grid>
</UserControl>

ViewModel

using CommunityToolkit.Mvvm.ComponentModel;
using LiveChartsCore.SkiaSharpView;
using LiveChartsCore;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LiveChartsCore.SkiaSharpView.Painting;
using SkiaSharp;
using System.Windows.Ink;
using LiveChartsCore.SkiaSharpView.Extensions;
using LiveChartsCore.SkiaSharpView.VisualElements;namespace BlankApp1.ViewModels
{partial class AViewModel : ObservableObject{public AViewModel() {var outer = 0;var data = new[] { 6, 5, 4, 3, 2 };// you can convert any array, list or IEnumerable<T> to a pie series collection:Series4 = data.AsPieSeries((value, series) =>{// this method is called once per element in the array// we are decrementing the outer radius 50px// on every element in the array.series.InnerRadius = 50;series.OuterRadiusOffset = outer;outer += 50;});}[ObservableProperty]private string title = "ViewA";public ISeries[] Series { get; set; }= new ISeries[]{new LineSeries<double>{Values = new double[] { 2, 1, 3, 5, 3, 4, 6 },Fill = null}};public ISeries[] Series2 { get; set; } ={new ColumnSeries<double>{IsHoverable = false, // disables the series from the tooltips Values = new double[] { 10, 10, 10, 10, 10, 10, 10 },Stroke = null,Fill = new SolidColorPaint(new SKColor(30, 30, 30, 30)),IgnoresBarPosition = true},new ColumnSeries<double>{Values = new double[] { 3, 10, 5, 3, 7, 3, 8 },Stroke = null,Fill = new SolidColorPaint(SKColors.CornflowerBlue),IgnoresBarPosition = true}};public Axis[] YAxes2 { get; set; } ={new Axis { MinLimit = 0, MaxLimit = 10 }};public IEnumerable<ISeries> Series3 { get; set; } =new[] { 2, 4, 1, 4, 3 }.AsPieSeries();public LabelVisual Title3 { get; set; } =new LabelVisual{Text = "My chart title",TextSize = 25,Padding = new LiveChartsCore.Drawing.Padding(15),Paint = new SolidColorPaint(SKColors.DarkSlateGray)};public IEnumerable<ISeries> Series4 { get; set; }}
}

GPU渲染

我听说LiveCharts2是用GPU渲染的,发现好像是真的
在这里插入图片描述

Github地址仓库

Gitee仓库地址 gclove2000 / WPF_LiveCharts2

相关文章:

WPF Live Charts2 自学笔记

文章目录 前言实现效果微软平台的历史问题 WPF 项目搭建Nuget添加额外框架添加项目初始化livecharts配置其它LiveCharts2 案例简单案例Demo示例ViewViewModel GPU渲染 Github地址仓库 前言 LiveChart 是C# 上面很受欢迎的统计图 UI控件。最近在学WPFhalcon开发&#xff0c;想想…...

大小堆的实现(C语言)

目录 前言 一种完全二叉树&#xff1a;堆 堆的概念 堆的性质 建堆的时间复杂度 建堆的空间复杂度&#xff1a; 小堆的实现 必要补充 堆的初始化 堆的销毁 向上调整算法 堆的插入 向下调整算法 堆的删除 获取堆顶元素 获取堆中元素个数 堆的判空 最终代码 He…...

Linux系统之centos7编译安装Python 3.8

前言 CentOS (Community Enterprise Operating System) 是一种基于 Red Hat Enterprise Linux (RHEL) 进行源代码再编译并免费提供给用户的 Linux 操作系统。 CentOS 7 采用了最新的技术和软件包&#xff0c;并提供了强大的功能和稳定性。它适用于各种服务器和工作站应用场景&a…...

Lambda表达式与方法引用

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 引子 先来看一个案例 …...

二维数组处理(一)

输入整型二维数组a&#xff08;5行5列&#xff09;&#xff0c;完成如下要求&#xff1a; 输出二维数组a。 将a的第2行和第4行元素对调后&#xff0c;形成新的二维数组a并按行输出&#xff0c;每个元素之间隔一个空格。(行号从0开始计算)。 用对角线&#xff08;指二维数组左…...

基于JNI实现调用C++ SDK

基于JNI实现调用C SDK 背景分析解决实践 背景 上篇文章总结了几种Java项目调用C/C SDK项目方法&#xff0c;在逐一实践、踩坑后&#xff0c;最终还是敲定采用 JNI 方式进行实现。在文章开始的过程&#xff0c;会先大概讲讲笔者遇到的情况&#xff0c;因为封装方式需要根据实际…...

计算机组成原理笔记——存储器(静态RAM和动态RAM的区别,动态RAM的刷新, ROM……)

■ 随机存取存储器 ■ 1.随机存取存储器&#xff1a;按存储信息的原理不同分为&#xff1a;静态RAM和动态RAM 2.静态RAM&#xff08;SRAM&#xff09;&#xff1a;用触发器工作原理存储信息&#xff0c;但电源掉电时&#xff0c;存储信息会丢失具有易失性。 3.存储器的基本单元…...

企业计算机服务器locked1勒索病毒数据恢复,locked1勒索病毒解密流程

随着计算机技术的不断发展&#xff0c;越来越多的企业走向数字化办公时代&#xff0c;计算机技术为企业的生产运营提供了有利条件&#xff0c;但也为企业带来了网络安全威胁。在本月&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的速达办公软件遭到了lo…...

Session 与 JWT 的对决:谁是身份验证的王者? (下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

论文笔记:Confidential Assets

Confidential Assets 描述了一种称为“保密交易”的方案&#xff0c;该方案模糊了所有UTXO的金额&#xff0c;同时保持了不创建或销毁硬币的公共可验证性。进一步将此方案扩展到“保密资产”&#xff0c;一种单一的基于区块链的分类帐可以跟踪多种资产类型的方案。将保密交易扩…...

Docker下搭建MySQL主从复制

目录 主从复制简介 主从复制搭建 主从复制简介 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数 据库一般是准实时的业务数据库。 主从复制的作用 做数据的热备。作为后备数据库&#xff0c;主数据库服务器故…...

VBA数据库解决方案第七讲:如何利用Recordset对象打开数据库的数据记录集

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…...

内部培训平台的系统 PlayEdu搭建私有化内部培训平台

PlayEdu是由白书科技团队多年经营的线上教育系统&#xff0c;专为企业提供的全新企业培训方案 我们的目标是为更多的企业机构搭建私有化内部培训平台&#xff0c;以满足不断增长的培训需求 通过PlayEdu&#xff0c;企业可以有效地组织和管理培训资源&#xff0c;提供高质量的…...

Elasticsearch 相似度评分模型介绍

前言 Elasticsearch 是基于 Lucene 的世界范围内最流行的全文检索框架&#xff0c;其文档相似度算法包含 TF/IDF 和 BM25&#xff0c;从 ES 5.0开始 BM25 算法已经成为 ES 默认的相似度评分模块。 TF-IDF 与 BM25 的区别 TF-IDF 和 BM25 都是计算文本相似性的常用算法。TF-ID…...

视频生成的发展史及其原理解析:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0

前言 考虑到文生视频开始爆发&#xff0c;比如11月份就是文生视频最火爆的一个月 11月3日&#xff0c;Runway的Gen-2发布里程碑式更新&#xff0c;支持4K超逼真的清晰度作品(runway是Stable Diffusion最早版本的开发商&#xff0c;Stability AI则开发的SD后续版本)11月16日&a…...

SQL Server 2016(基本概念和命令)

1、文件类型。 【1】主数据文件&#xff1a;数据库的启动信息。扩展名为".mdf"。 【2】次要&#xff08;辅助&#xff09;数据文件&#xff1a;主数据之外的数据都是次要数据文件。扩展名为".ndf"。 【3】事务日志文件&#xff1a;包含恢复数据库的所有事务…...

Linux C语言 30-套接字操作

Linux C语言 30-套接字操作 本节关键字&#xff1a;C语言 网络通信、套接字操作、TCP、UDP、服务端、客户端 相关C库函数&#xff1a;socket, bind, listen, accept, setsockopt, recv, send, recvfrom, sendto, close 什么是网络通信&#xff1f; 通信是人与人之间通过某种…...

RPC和REST对比

RPC和REST对比 参考学习 RPC 和 REST 之间有什么区别&#xff1f; 当我们对比RPC和REST时&#xff0c;其实是在对比RPC风格的API和REST风格的API&#xff0c;后者通常成为RESTful API。 远程过程调用&#xff08;RPC&#xff09;和 REST 是 API 设计中的两种架构风格。API …...

外包干了2年,技术退步明显。。。

前言 简单的说下&#xff0c;我大学的一个同学&#xff0c;毕业后我自己去了自研的公司&#xff0c;他去了外包&#xff0c;快两年了我薪资、技术各个方面都有了很大的提升&#xff0c;他在外包干的这两年人都要废了&#xff0c;技术没一点提升&#xff0c;学不到任何东西&…...

深度学习——第1章 深度学习的概念及神经网络的工作原理

1.1 序言——探索智能机器 千百年来&#xff0c;人类试图了解智能的机制&#xff0c;并将它复制到思维机器上。 人类从不满足于让机械或电子设备帮助做一些简单的任务&#xff0c;例如使用滑轮吊起沉重的岩石&#xff0c;使用计算器做算术。 人类希望计算机能够自动化执行更…...

邮件安全网关怎么选?三种类型网关和功能对比全面解析

在信息技术飞速发展的今天&#xff0c;企业的邮件通信越来越依赖于电子邮件。然而&#xff0c;伴随而来的安全隐患也不容忽视。邮件安全网关作为保护企业邮件通信的重要工具&#xff0c;已经成为企业信息安全不可或缺的一部分。那么&#xff0c;邮件安全网关到底该怎么选&#…...

如何快速掌握LiteDB.Studio:面向初学者的LiteDB数据库终极GUI管理工具完整指南

如何快速掌握LiteDB.Studio&#xff1a;面向初学者的LiteDB数据库终极GUI管理工具完整指南 【免费下载链接】LiteDB.Studio A GUI tool for viewing and editing documents for LiteDB v5 项目地址: https://gitcode.com/gh_mirrors/li/LiteDB.Studio 在嵌入式数据库应用…...

从稀疏重构到精准定位:OMP-CS算法在DOA估计中的实战解析

1. 从稀疏信号到空间定位&#xff1a;OMP-CS算法的核心逻辑 第一次接触OMP-CS算法时&#xff0c;我盯着那堆数学公式发呆了半小时。直到把天线阵列想象成麦克风阵列&#xff0c;事情突然变得简单——这不就是通过多个麦克风判断声音方向的升级版吗&#xff1f;在雷达和通信系统…...

声明式工作流编排框架:从计划到执行的自动化实践

1. 项目概述&#xff1a;从“计划清单”到“框架”的蜕变如果你和我一样&#xff0c;在职业生涯中经历过从零到一构建复杂应用&#xff0c;或者维护过多个技术栈各异、需求多变的项目&#xff0c;那你一定对“计划”和“清单”这两个词深有感触。我们每天都在做计划&#xff0c…...

Empire(帝国)CMS 7.5 恶意文件上传-CVE-2018-18086

登录管理员页面&#xff1a;这里经过多次测试&#xff0c;直接上传一句话样本文件的话不生效&#xff08;避坑&#xff09;&#xff0c;并且$符需要做转义&#xff08;避坑&#xff09;,否则&#xff1a;方式1&#xff1a;<?php file_put_contents("getshell.php"…...

如何用NHSE动物森友会存档编辑器快速打造梦想岛屿:终极完整指南

如何用NHSE动物森友会存档编辑器快速打造梦想岛屿&#xff1a;终极完整指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 还在为《集合啦&#xff01;动物森友会》中收集稀有物品而烦恼吗&#…...

CST实战指南 | 场路协同仿真中的元器件模型导入与验证

1. 场路协同仿真中的元器件模型导入基础 我第一次接触CST场路协同仿真时&#xff0c;最头疼的就是如何把各种元器件模型正确导入到仿真环境中。经过多次项目实践&#xff0c;我发现这其实是个系统性工程&#xff0c;需要根据不同的仿真场景和元器件类型采取不同的处理策略。 在…...

Midjourney v7艺术风格跃迁路径:从基础写实到超现实叙事的5阶能力模型,含GPT-4o协同提示链模板

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney v7艺术风格跃迁路径总览 Midjourney v7 并非简单迭代&#xff0c;而是以扩散模型架构重构与多模态风格理解为内核的范式跃迁。其核心突破在于引入「语义风格锚点&#xff08;Semantic Style…...

别再手动改路由了!用Ant Design Vue的Menu组件动态生成“顶一左多”级导航菜单

基于Ant Design Vue的声明式导航菜单架构设计 在复杂后台管理系统开发中&#xff0c;导航菜单的动态生成与权限控制一直是架构设计的难点。传统方案往往需要在多个组件中硬编码菜单结构&#xff0c;导致维护成本高、权限同步困难。本文将介绍如何利用Ant Design Vue的Menu组件与…...

自动驾驶系统商业化策略:硬件与软件协同设计解析

1. 自动驾驶系统的商业策略框架解析自动驾驶系统&#xff08;Autonomous Driving System, ADS&#xff09;作为智能交通领域的核心技术&#xff0c;其商业化落地需要硬件&#xff08;SSH&#xff09;与软件策略的协同设计。从技术架构来看&#xff0c;ADS由感知层、决策层和执行…...