C# WPF上位机开发(图形显示软件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        在实际应用中,有一种情况就是,我们需要经常对数据进行图形化显示,这样会比较直观一点。比如经济统计里面的同比、环比显示,pid里面的调参结果显示,传感器数据的实时显示等等,这些内容都是软件开发中很重要的环节。而对c# wpf而言,因为自身有很多开源库的加持,本身用data chart显示特别简单和容易,大家可以好好掌握一下。

        本次使用地开源库是OxyPlot库,其他的库也比较类似,大家可以选择自己熟悉的开发库进行学习和使用。

1、安装OxyPlot库

        安装OxyPlot库的方法比较简单,直接打开NuGet程序包,选择下载OxPlot.Core即可。下载完毕之后,我们就会在引用节点下面查看到OxyPlot、OxyPlot.Wpf、OxyPlot.Wpf.Shared这三个库。

2、MainWindow类不做修改

        关于数据的内容部分,这里借用了MVVM的思想,本身不需要对MainWindow类做任何的修改。这部分就可以直接忽略过去了。

3、设计界面

        界面部分的设计,最最重要的就是创建一个PlotView区域,并且将这个区域和MyModel做一个绑定。

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:oxy="http://oxyplot.org/wpf"xmlns:local="clr-namespace:WpfApp"Title="ChartDemo" Height="400" Width="500"><Window.DataContext><local:PlotViewModel/></Window.DataContext><Grid><oxy:PlotView Model="{Binding MyModel}"/></Grid>
</Window>

4、创建PlotViewModel.cs文件

        细心的同学可能发现,在xaml文件中也出现了PlotViewModel的身影,这就是它将来需要bind的class。在PlotViewModel当中会有一个PlotModel的变量,就是MyModel。我们在PlotView上面生成的任何图像都是用MyModel来生成的。

        当然,这里的内容不太多,目前为止我们显示的内容还只是一个正弦曲线和一个余弦曲线。因为它本身也是作为一个抛砖引玉的目的存在的。大家如果后续需要掌握更多的显示方法,可以参考OxyPlot的官网,寻找更多的demo code。

using System;
using OxyPlot;
using OxyPlot.Axes;
using OxyPlot.Series;namespace WpfApp
{public class PlotViewModel{public PlotModel MyModel { get; private set; }public PlotViewModel(){this.MyModel = new PlotModel { Title = "Sin/Cos Graph" };MyModel.Series.Add(new FunctionSeries(Math.Cos, -10, 10, 0.1, "cos(x)"));MyModel.Series.Add(new FunctionSeries(Math.Sin, -10, 10, 0.1, "sin(x)"));}}
}

5、显示和测试

        所有一切都准备好了之后,就可以开始显示了。编译无误之后,直接单击启动。不出意外的话,我们应该可以看到如下所示的画面,这基本代表我们已经可以把OxyPlot正常用起来了。当然大家如果本身不喜欢使用库,用canvas直接画图的话,这也是可以的。只要是效果做出来,达到自己的设计目的和使用要求就可以了,不必拘泥于形式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

波奇学C++:类型转换和IO流

隐式类型转换 int i0; double pi; 强制类型转换 int* pnullptr; int a(int)p; 单参数构造函数支持隐式类型转换 class A { public:A(string a):_a(a){} private:string _a; }; A a("xxxx"); //"xxx" const char* 隐式转换为string 多参数也可以通过{…

【对象数组根据属性排序】

// sort使用的排序方法 // 传入对象数组用于排序的对象的属性,升序/降序 function compare(property, sortType "asc") {debugger// 如果不是 asc,desc,不做下一步比较if (!(sortType "desc" || sortType "asc")) {return;}return function (…

阿里云账号注册完成实名认证免费领取云服务器4台

注册阿里云&#xff0c;免费领云服务器&#xff0c;每月280元额度&#xff0c;3个月试用时长&#xff0c;可快速搭建网站/小程序&#xff0c;部署开发环境&#xff0c;开发多种企业应用&#xff0c;共3步骤即可免费领取阿里云服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com…

mysql pxc高可用离线部署(三)

pxc学习流程 mysql pxc高可用 单主机 多主机部署&#xff08;一&#xff09; mysql pxc 高可用多主机离线部署&#xff08;二&#xff09; mysql pxc高可用离线部署&#xff08;三&#xff09; mysql pxc高可用 跨主机部署pxc 本文使用docker进行安装&#xff0c;主机间通过…

4-Tornado高并发原理

核心原理就是协程epoll事件循环&#xff0c;再使用协程之后&#xff0c;开销是特别的小&#xff0c;那具体如何提供高并发的呢&#xff1f; 异步非阻塞IO 这意味我们整套开发的模式不在与原来一样&#xff0c;正因为不再一样&#xff0c;所以有时我们在理解代码时就有可能会比…

网络安全威胁——中间人攻击

中间人攻击 1. 定义2. 中间人攻击如何工作3. 常见中间人攻击类型4. 如何防止中间人攻击 1. 定义 中间人攻击&#xff08;Man-in-the-Middle Attack&#xff0c;简称MITM&#xff09;&#xff0c;是一种会话劫持攻击。攻击者作为中间人&#xff0c;劫持通信双方会话并操纵通信过…

6、Broker消息处理流程(六)

前面分析完Broker启动会启动RemotingServer服务同时会注册Processor处理器&#xff0c;接着分析Producer进行消息的发送&#xff0c;当Producer发送完消息后就得到Broker去接收Producer发送的消息了。 Producer发送给Broker消息时候&#xff0c;发送的请求code为SEND_MESSAGE(这…

模板函数模板类入门

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 因为做牛客的题目…

(2)(2.4) TerraRanger Tower/Tower EVO(360度)

文章目录 前言 1 安装传感器并连接 2 通过地面站进行配置 3 参数说明 前言 TeraRanger Tower 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用距离约为 4.5m。 TeraRanger Tower EVO 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用…

Vue实现条件渲染

&#x1f4d1;前言 本文主要是【Vue】——Vue实现条件渲染的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&am…

2023-12-06 LeetCode每日一题(最小化旅行的价格总和)

2023-12-06每日一题 一、题目编号 2646. 最小化旅行的价格总和二、题目链接 点击跳转到题目位置 三、题目描述 现有一棵无向、无根的树&#xff0c;树中有 n 个节点&#xff0c;按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges &#xff0…

dtaidistance 笔记:相似度压缩

1 相似度 相似度&#xff1a;1表示相等&#xff0c;0表示疏远 给定一组时间序列&#xff08;每一行是一个&#xff09;&#xff0c;计算基于DTW的逐对相似度 from dtaidistance import dtw, similarity s np.array([[0., 0, 1, 2, 1, 0, 1, 0, 0],[0., 1, 2, 0, 0, 0, 0, 0,…

word 目录生成

参考&#xff1a;百度安全验证 什么word生成的目录没有标题4&#xff1f;  我来答 分享 举报 1个回答 #热议# 海关有哪些禁运商品&#xff1f;查到后怎么办&#xff1f; 缘来是我LXZ 高粉答主 2023-09-28 缘来缘去终会散&#xff0c;花开花败总归尘。 关注 在word…

PyQt6 QTabWidget选项卡控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计37条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…

Unity - yield return相关用法

yield return null; // 下一帧再执行后续代码yield return 0; //下一帧再执行后续代码yield return 6;//(任意数字) 下一帧再执行后续代码yield break; //直接结束该协程的后续操作yield return asyncOperation;//等异步操作结束后再执行后续代码yield return StartCoroution(/…

测试岗外包干了3个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生生&#xff0c;21年通过校招进入成都某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试…

【Intel/Altera】 全系列FPGA最新汇总说明,持续更新中

前言 2023年11月14日英特尔 FPGA中国技术日&#xff0c;Intel刚发布了新的FPGA系列&#xff0c;官网信息太多&#xff0c;我这里结合以前的信息&#xff0c;简单汇总更新一下&#xff0c;方便大家快速了解Intel/Altera FPGA家族。 目录 前言 Altera和Intel 型号汇总 1. Agi…

Redis 命令全解析之 String类型

文章目录 ⛄String 介绍⛄命令⛄对应 RedisTemplate API⛄应用场景 ⛄String 介绍 String 类型&#xff0c;也就是字符串类型&#xff0c;是Redis中最简单的存储类型。 其value是字符串&#xff0c;不过根据字符串的格式不同&#xff0c;又可以分为3类&#xff1a; ● string&…

使用 PyTorch 进行 K 折交叉验证

一、说明 中号机器学习模型在训练后必须使用测试集进行评估。我们这样做是为了确保模型不会过度拟合&#xff0c;并确保它们适用于现实生活中的数据集&#xff0c;与训练集相比&#xff0c;现实数据集的分布可能略有偏差。 但为了使您的模型真正稳健&#xff0c;仅仅通过训练/测…

mysql5.6密码忘记重置

在 MySQL 5.6 中&#xff0c;使用 ALTER USER 语句来修改用户密码是不支持的。可以使用以下步骤来重置 root 用户密码&#xff1a; 停止 MySQL 服务。 在终端中执行以下命令&#xff1a; systemctl stop mysql启动 MySQL 服务&#xff0c;并跳过权限验证。 在终端中执行以下命…