WPF中使用Echarts显示图表

news/2024/9/18 23:20:22/ 标签: wpf, echarts, 前端

在WPF中使用ECharts来显示图表,你需要将ECharts嵌入到WPF应用程序中。我们这里介绍两种方法显示图表:

目录

一、ECharts是一个基于JavaScript的开源可视化图表库,因此我们需要使用WebView控件来承载一个嵌入式浏览器,这样就可以在WPF应用程序中显示HTML和JavaScript内容。

1. 安装必要的库

2. 创建HTML文件并加载ECharts

HTML文件(chart.html):

3. 在WPF中使用WebView2加载HTML

XAML部分

代码隐藏部分(MainWindow.xaml.cs)

4. 运行程序

5.注意事项

二、在 WPF 项目中引入 ECharts 的 .NET 封装库 ECharts.Net.Wpf后,在 WPF 页面的 XAML 中添加 ECharts 控件, WPF 页面的代码后台初始化 ECharts 控件并设置相关选项。

1.首先,通过 NuGet 安装 ECharts.Net.Wpf 包。

2.然后,在 XAML 中添加 ECharts 控件

3.在后台代码中设置 ECharts 的选项


一、ECharts是一个基于JavaScript的开源可视化图表库,因此我们需要使用WebView控件来承载一个嵌入式浏览器,这样就可以在WPF应用程序中显示HTML和JavaScript内容。

1. 安装必要的库

你可以使用WebView2控件,它是Microsoft Edge的嵌入式浏览器控件。WebView2是一个现代的浏览器控件,支持最新的Web标准和JavaScript。

首先,你需要在你的WPF项目中安装Microsoft.Web.WebView2。使用NuGet包管理器安装:

Install-Package Microsoft.Web.WebView2

 

2. 创建HTML文件并加载ECharts

接下来,我们创建一个HTML文件来加载ECharts库。可以直接在WPF应用程序中嵌入这个HTML文件或者加载外部HTML文件。

HTML文件(chart.html):
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>ECharts in WPF</title><!-- 引入ECharts库 --><script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script><style>/* 设置图表的样式 */#chart-container {width: 100%;height: 100%;}</style>
</head>
<body><div id="chart-container"></div><script>// 基于准备好的DOM,初始化echarts实例var myChart = echarts.init(document.getElementById('chart-container'));// 指定图表的配置项和数据var option = {title: {text: 'ECharts 示例'},tooltip: {},xAxis: {data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']},yAxis: {},series: [{name: '销量',type: 'bar',data: [5, 20, 36, 10, 10, 20]}]};// 使用刚指定的配置项和数据显示图表myChart.setOption(option);</script>
</body>
</html>

3. 在WPF中使用WebView2加载HTML

在你的WPF项目中,使用WebView2控件加载并显示HTML文件。

XAML部分

在你的XAML文件中,添加WebView2控件:

<Window x:Class="EChartsInWPF.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"Title="ECharts in WPF" Height="450" Width="800"><Grid><WebView2 Name="webView" Source="chart.html"/></Grid>
</Window>

代码隐藏部分(MainWindow.xaml.cs

MainWindow.xaml.cs中,你需要初始化WebView2控件,并加载HTML文件。假设HTML文件位于应用程序的输出目录下。

using Microsoft.Web.WebView2.Core;
using System;
using System.IO;
using System.Windows;namespace EChartsInWPF
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();// 初始化WebView2InitializeWebView();}private async void InitializeWebView(){// 确保WebView2环境已初始化await webView.EnsureCoreWebView2Async();// 加载本地HTML文件string htmlFilePath = Path.Combine(Directory.GetCurrentDirectory(), "chart.html");webView.Source = new Uri(htmlFilePath);}}
}

 

4. 运行程序

确保你的chart.html文件位于项目的输出目录(通常是bin\Debug\net5.0-windowsbin\Debug\netcoreapp3.1等)下,然后运行程序。WebView2将加载HTML文件并显示ECharts图表。

5.注意事项

  • 确保你已经安装了Microsoft Edge WebView2运行时,它是WebView2控件正常工作的前提。
  • 如果要动态生成或更新图表数据,可以使用JavaScript交互来更新图表的数据和样式。
  • 你可以通过在C#代码中向WebView2控件注入JavaScript来控制图表的更新和交互。

二、在 WPF 项目中引入 ECharts 的 .NET 封装库 ECharts.Net.Wpf后,在 WPF 页面的 XAML 中添加 ECharts 控件, WPF 页面的代码后台初始化 ECharts 控件并设置相关选项。

1.首先,通过 NuGet 安装 ECharts.Net.Wpf 包。

2.然后,在 XAML 中添加 ECharts 控件:

<Window x:Class="WpfEChartsExample.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:ec="clr-namespace:ECharts.Net.Wpf;assembly=ECharts.Net.Wpf"Title="MainWindow" Height="350" Width="525"><Grid><ec:ChartingArea x:Name="chart" Margin="10"/></Grid>
</Window>

3.在后台代码中设置 ECharts 的选项:

using System.Windows;
using ECharts.Net.Common;
using ECharts.Net.Common.Model;
using ECharts.Net.Wpf;namespace WpfEChartsExample
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();InitializeChart();}private void InitializeChart(){var option = new GlobalOptions{Title = new Title{Text = "ECharts in WPF Example"},Tooltip = new Tooltip{Trigger = TriggerType.Axis},XAxis = new XAxis{Data = new object[] { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" }},YAxis = new YAxis(),Series = new object[]{new Series{Name = "Sales",Type = SeriesType.Bar,Data = new object[] { 10, 52, 200, 334, 390, 330, 220 }}}};chart.SetGlobalOptions(option);}}
}
以上代码创建了一个基本的柱状图,展示了如何在 WPF 应用程序中集成 ECharts。记得需要先通过 NuGet 安装 ECharts.Net.Wpf 包。

http://www.ppmy.cn/news/1519410.html

相关文章

JVM 性能分析 —— CMS 老年代并发 GC 触发条件与压缩式 GC (升级为 Full GC)触发条件

文章目录 CMS 触发老年代 GC 条件foreground collector&#xff08;前台收集&#xff09;background collector&#xff08;后台收集&#xff09; MSC&#xff08;mark-sweep-compact 压缩式 GC&#xff09; CMS 触发老年代 GC 条件 先看看触发老年代GC的条件。CMS GC 在实现上…

线程池在接受到30个比较耗时的任务时的状态,在前面30个比较耗时的任务还没执行完成的情况下,再来多少个任务会触发拒绝策略?

目录 一、提出问题 二、解答 问题 1: 线程池在接受到30个比较耗时的任务时的状态 问题 2: 在前面30个比较耗时的任务还没执行完成的情况下&#xff0c;再来多少个任务会触发拒绝策略&#xff1f; 总结 一、提出问题 我们首先自定义一个线程池&#xff1a; new ThreadPoo…

python基本语法总结

参考&#xff1a; Python 基础语法 | 菜鸟教程 (runoob.com) Python 语言与 Perl&#xff0c;C 和 Java 等语言有许多相似之处。但是&#xff0c;也存在一些差异。 在本章中我们将来学习 Python 的基础语法&#xff0c;让你快速学会 Python 编程。 第一个Python程序 python编写…

【python】OpenCV—Multi Human Pose Estimation

文章目录 1、背景介绍2、关键点检测模型3、源码与结果4、源码解读——检测关键点5、源码解读——找到有效对6、源码解读——组装个人关键点7、涉及到的库cv2.dnn.blobFromImage 8、参考 1、背景介绍 【python】OpenCV—Single Human Pose Estimation 本文以 COCO 格式为例&am…

内存管理笔记

1、内存管理简介 在计算机系统中&#xff0c;变量、中间数据一般存放在系统存储空间中&#xff0c;只有在实际使用时才将它们从存储空间调入到中央处理器内部进行运算。通常存储空间可以分为两种&#xff1a;内部存储空间和外部存储空间。内部存储空间访问速度比较快&#xff…

中文科技核心

“中文科技核心”通常指的是在中文领域内具有重要影响力和学术价值的科技研究或出版物。这些核心期刊和论文集主要集中在自然科学、工程技术、计算机科学等领域&#xff0c;代表了该领域的前沿研究成果。以下是关于中文科技核心的一些要素和相关内容。 1. 中文科技核心期刊的定…

Transformer参数量和复杂度

在算法岗面试中经常会问到Transformer相关的基础知识。 首先需要清楚Transformer的参数量和复杂度分别在算什么。 定义&#xff1a; 参数量&#xff1a;神经网络中有很多参数矩阵&#xff0c;这个矩阵大小的和就是参数量&#xff0c;静态的&#xff0c;摆在那就在那&#xff…

通过 Filter 改写请求的 Response

通过 Filter 改写请求的 Response 1、自定义 ResponseWrapper 自定义 ResponseWrapper&#xff0c;用于获取 Response Data public class RewriteRespWrapper extends HttpServletResponseWrapper {private final ByteArrayOutputStream output;private ServletOutputStream…

华为 HCIP-Datacom H12-821 题库 (3)

有需要题库的可以看主页置顶 1.运行 OSPF 协议的路由器在交互 DD 报文时&#xff0c;会使用以下哪一个参数选举主从关系&#xff1f; A、接口的 IP 地址 B、接口的 DR 优先级 C、Area ID D、Router ID 答案&#xff1a;D 解析&#xff1a; Router-ID 大的为主&#xff0c;小的…

初爽Stream流

体验Stream流的作用&#xff1a; 需求&#xff1a; 按照下面的要求完成集合的创建和遍历 创建一个集合&#xff0c;存储多个字符串元素 要求&#xff1a; 1.把所有以“张”开头的元素存储到新集合中 2.把“张”开头的&#xff0c;长度为3的元素再存储到新集合中 3.遍历打…

Java小项目IDEA怎么打成jar包

使用IDEA打jar包 在file选项中找 打开jar包所在位置&#xff1a; 将jar包拿出来 直接点击jar包就可以运行

Linux tty模式下无法使用回滚功能解决(shift+pgup方法不管用)

Linux tty模式下无法使用回滚功能解决&#xff08;shiftpgup方法不管用&#xff09; 自从内核5.9版本以后&#xff0c;回滚功能就被取消&#xff1a;fbcon: remove soft scrollback code 此前是可以使用 Shift PageUp/PageDown 来滚动的。现在假如我们想查看屏幕以外的文字&…

算法训练营|图论第二天 99.岛屿数量 100.岛屿的最大面积

题目&#xff1a;99.岛屿数量 题目链接&#xff1a; 99. 岛屿数量 (kamacoder.com) 代码&#xff1a; 深度优先搜索&#xff1a; #include<bits/stdc.h> using namespace std; int dir[4][2] { 0,1,1,0,-1,0,0,-1 }; void dfs(vector<vector<int>>&…

MySQL唯一索引大小写敏感性问题及字符集深入解析

1. 问题背景与描述 在实际生产环境中&#xff0c;我们遇到了一个插入重复异常的问题。具体表现在长链接转换为短链接的过程中&#xff0c;生成的短链被插入数据库时触发了唯一索引的冲突错误。错误的根本原因在于数据库使用了不区分大小写的排序规则&#xff0c;导致两个看似不…

Linux下安装MySQL8.0

一、安装 1.下载安装包 先创建一个mysql目录&#xff0c;在将压缩包下载到此 # 下载tar包 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz等待下载成功 2.解压mysql8.0安装包 tar xvJf mysql-8.0.20-linux-glibc2.12-x86…

尝试用java spring boot+VUE3实现前后端分离部署

前言 这几天开学了&#xff0c;公司这边几个和学校对接的项目都挺忙的&#xff0c;然后我又开始有点闲的情况了。问大佬能不能继续看看若依的项目&#xff0c;大佬让我自己去学了。在看若依的项目的时候在想&#xff0c;python的FLASK后端实现和JAVA spring boot的实现差别大不…

【GPT】Coze使用开放平台接口-【2】创建工作流-语音伪造检测工作流

在Coze使用开放平台接口-【1】创建插件&#xff0c;我们已经成功创建了开放平台的插件&#xff0c;也创建了对应的工具。本文档就根据创建好的插件&#xff0c;来创建对应的工作流&#xff0c;来让接口能够用起来。 下面直接用现成的插件快商通AI开放平台&#xff0c;来创建语音…

深度学习实战1--决策树与随机森林(最新版本不报错)

1.乳腺癌数据集简介 乳腺癌数据集包含了美国威斯康星州记录的569个病人的乳腺癌的病情&#xff0c;包含30个维度的生理指标数据(特征),以及乳腺癌是恶性还是良性的标签。因为这是一个二分类问题&#xff0c; 也叫二类判别数据集。 2.实战任务 这数据主要包含569个样本。每个样…

【3.6】贪心算法-解救生艇问题

一、题目 第 i 个人的体重为 people[i]&#xff0c;每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人&#xff0c;但条件是这些人的重量之和最多为 limit 。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。 二、解题思路 题目要求每艘船最多能载两人&…

安美数字酒店宽带运营系统-任意文件读取

漏洞描述&#xff1a; 安美数字酒店宽带运营系统 weather.php 接口存在任意文件读取漏洞&#xff0c;未经身份验证攻击者可通过该漏洞读取系统重要文件&#xff08;如数据库配置文件、系统配置文件&#xff09;、数据库配置文件等等&#xff0c;导致网站处于极度不安全状态 fo…