原文:封装:WPF绘制曲线视图

一、目的:绘制简单轻量级的曲线视图

二、实现:

1、动画加载曲线

2、点击图例显示隐藏对应曲线

3、绘制标准基准线

4、绘制蒙板显示标准区域

曲线图示例:

心电图示例:

三、实现代码

View:


  1. <echart:StaticCurveChartPlotter x:Name="chart" Background="White" DataSource="{Binding Collection}"
  2. FontSize="12" MaxValueY="400" MinValueY="0" MaxValueX="{Binding MaxValue}" MinValueX="{Binding MinValue}"
  3. IsLegendVisible="True" Height="200" Width="800">
  4. <!--MaxValueX="11" MinValueX="0"-->
  5. <echart:StaticCurveChartPlotter.SplitItemYs>
  6. <echart:SplitItem Color="DarkGray" Value="400" Text="400 " ></echart:SplitItem>
  7. <echart:SplitItem Color="DarkGray" Value="350" Text="350 " ></echart:SplitItem>
  8. <echart:SplitItem Color="DarkGray" Value="300" Text="300 "></echart:SplitItem>
  9. <echart:SplitItem Color="DarkGray" Value="250" Text="250"></echart:SplitItem>
  10. <echart:SplitItem Color="Red" Value="240" Text="240 mmHg" SpliteType="HeighLight"/>
  11. <echart:SplitItem Color="DarkGray" Value="200" Text="200"></echart:SplitItem>
  12. <echart:SplitItem Color="DarkGray" Value="150" Text="150"></echart:SplitItem>
  13. <echart:SplitItem Color="DarkGray" Value="100" Text="100" ></echart:SplitItem>
  14. <echart:SplitItem Color="Green" Value="90" Text="90 mmHg" SpliteType="HeighLight"></echart:SplitItem>
  15. <echart:SplitItem Color="DarkGray" Value="50" Text="50 "></echart:SplitItem>
  16. <echart:SplitItem Color="DarkGray" Value="0" Text="0 "></echart:SplitItem>
  17. </echart:StaticCurveChartPlotter.SplitItemYs> </echart:StaticCurveChartPlotter>

ViewModel:


  1. /// <summary> 说明 </summary>
  2. partial class MainWindowViewModel
  3. {
  4. private List<ICurveEntitySource> _collection = new List<ICurveEntitySource>();
  5. /// <summary> 曲线图数据 </summary>
  6. public List<ICurveEntitySource> Collection
  7. {
  8. get { return _collection; }
  9. set
  10. {
  11. _collection = value;
  12. RaisePropertyChanged("Collection");
  13. }
  14. }
  15. void Init()
  16. {
  17. RefreshCurveData();
  18. }
  19. public void RefreshCurveData()
  20. {
  21. List<ICurveEntitySource> collection = new List<ICurveEntitySource>();
  22. CurveEntitySource entity = new CurveEntitySource();
  23. entity.Text = "长度(km)";
  24. entity.Color = Brushes.Red;
  25. entity.Marker = new CirclePointMarker();
  26. entity.Marker.Fill = Brushes.Red;
  27. for (int i = 0; i < 20; i++)
  28. {
  29. PointC point = new PointC();
  30. point.X = i;
  31. point.Y = i*i;
  32. point.Text = DateTime.Now.AddDays(i).ToString("yyyy-MM-dd");
  33. entity.Source.Add(point);
  34. this.MinValue = this.MinValue > point.X ? point.X : this.MinValue;
  35. this.MaxValue = this.MaxValue < point.X ? point.X : this.MaxValue;
  36. }
  37. collection.Add(entity);
  38. entity = new CurveEntitySource();
  39. entity.Text = "重量(kg)";
  40. entity.Color = Brushes.Orange;
  41. entity.Marker = new T5PointMarker();
  42. entity.Marker.Fill = Brushes.Orange;
  43. for (int i = 0; i < 20; i++)
  44. {
  45. PointC point = new PointC();
  46. point.X = i;
  47. point.Y = (20-i) * (20 - i);
  48. point.Text = DateTime.Now.AddDays(i).ToString("yyyy-MM-dd");
  49. entity.Source.Add(point);
  50. this.MinValue = this.MinValue > point.X ? point.X : this.MinValue;
  51. this.MaxValue = this.MaxValue < point.X ? point.X : this.MaxValue;
  52. }
  53. collection.Add(entity);
  54. this.Collection = collection;
  55. }
  56. private double _maxValue = double.MinValue;
  57. /// <summary> 说明 </summary>
  58. public double MaxValue
  59. {
  60. get { return _maxValue; }
  61. set
  62. {
  63. _maxValue = value;
  64. RaisePropertyChanged("MaxValue");
  65. }
  66. }
  67. private double _minValue = double.MaxValue;
  68. /// <summary> 说明 </summary>
  69. public double MinValue
  70. {
  71. get { return _minValue; }
  72. set
  73. {
  74. _minValue = value;
  75. RaisePropertyChanged("MinValue");
  76. }
  77. }
  78. }
  79. partial class MainWindowViewModel : INotifyPropertyChanged
  80. {
  81. public MainWindowViewModel()
  82. {
  83. Init();
  84. }
  85. #region - MVVM -
  86. public event PropertyChangedEventHandler PropertyChanged;
  87. public void RaisePropertyChanged([CallerMemberName] string propertyName = "")
  88. {
  89. if (PropertyChanged != null)
  90. this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  91. }
  92. #endregion
  93. }

结构设计:

示例图片:

下载地址 :GitHut: https://github.com/HeBianGu/WpfChartProgram.git

封装:WPF绘制曲线视图的更多相关文章

  1. C# chart控件绘制曲线

    在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你所需要的曲线图.柱状图什么的了. using Syst ...

  2. 12-UIKit(View绘制、绘制曲线、绘制文字、贴图)

    目录: 1. View绘制 2. 绘制曲线 3. 绘制文字 4. 贴图 回到顶部 1. View绘制 1.1 做出自己的视图对象 TRCell : UITableViewCell : UIView U ...

  3. C#中利用LightningChart绘制曲线图表

    最近在做一个“基于C#语言的电炉温控制软件设计”的设计,我在大学并不是专业学习C#语言编程的,对C#的学习研究完全是处于兴趣,所以编程技术也不是很厉害,遇到问题多参照网络上的开源码. 这不,在做这个课 ...

  4. MFC--根据串口采集的数据借助GDI绘制曲线

    根据采集到的数据绘制曲线 在串口编程中会涉及到这样一个问题,就是将采集到的数据以曲线的形式展示出来,大家自然而然会想到采用方便快捷的控件进行编程.编程周期短,完成任务快,但是真实情况来看,控件会实现很 ...

  5. WPF绘制深度不同颜色的3D模型填充图和线框图

    原文:WPF绘制深度不同颜色的3D模型填充图和线框图 在机械测量过程中,测量的数据需要进行软件处理.通常测量一个零件之后,需要重建零件的3D模型,便于观察测量结果是否与所测工件一致. 重建的3D模型需 ...

  6. [原译]WPF绘制圆角多边形

    原文:[原译]WPF绘制圆角多边形 介绍 最近,我发现我需要个圆角多边形.而且是需要在运行时从用户界面来绘制.WPF有多边形.但是不支持圆角.我搜索了一下.也没找到可行的现成例子.于是就自己做吧.本文 ...

  7. Canvas学习:封装Canvas绘制基本图形API

    Canvas学习:封装Canvas绘制基本图形API Canvas Canvas学习   从前面的文章中我们了解到,通过Canvas中的CanvasRenderingContext2D对象中的属性和方 ...

  8. WPF贝塞尔曲线示例

    WPF贝塞尔曲线示例 贝塞尔曲线在之前使用SVG的时候其实就已经有接触到了,但应用未深,了解的不是很多,最近在进行图形操作的时候需要用到贝塞尔曲线,所以又重新来了解WPF中贝塞尔曲线的绘制. 一阶贝塞 ...

  9. 使用D3绘制图表(2)--绘制曲线

    上一篇是使用D3绘制画布,这一篇的内容是在画布上绘制曲线. 1.之前的html代码没有变化,但是我还是贴出来 <!DOCTYPE html> <html> <head&g ...

随机推荐

  1. Centos7配置ssh免密登录群发

    ssh免密登录是客户端发送自己的公钥到服务器.用公钥进行解密,自己生成的私钥进行加密. 首先在客户端查看sshd服务是否启动 [zhiwei@zhiwei1 ~]$ ps -Af|grep sshd; ...

  2. WooCommerce代码合集整理

    本文整理了一些WooCommerce代码合集,方便查阅和使用,更是为了理清思路,提高自己.以下WooCommerce简称WC,代码放在主题的functions.php中即可. 修改首页和分类页面每页产 ...

  3. 重新学习Spring注解——扩展原理

    39.扩展原理-BeanFactoryPostProcessor 40.扩展原理-BeanDefinitionRegistryPostProcessor 41.扩展原理-ApplicationList ...

  4. html--JavaScript之DOM (文档对象模型)

    一.简介 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 定义了用于 HTML 的一系列标准的对象,以及访问和处理 HTML 文档的标 ...

  5. plv8 中使用 eval 函数执行表达式计算

    在js 开发中我们都说eval 函数是邪恶的,但是此函数也有好多妙用,以下是几个简单的案例 eval 执行基于js 的表达式计算 比如我们有以下表 CREATE TABLE rules (    id ...

  6. contest1 CF70 BetaRound ooxxx ooxxx ooooo

    CDE set之类不要直接用lower_bound, 要用set.lower_bound()

  7. monkey--常用参数

    前戏 参数分类:常规类参数,事件类参数,约束类参数,调试类参数 常规类参数:常规类参数包括帮助参数和日志信息参数,帮助参数用于输出monkey命令使用指导,日志信息参数将日志分为三个等级,级别越高,日 ...

  8. 设计模式主目录 C++实现

    行为性模式 1.观察者模式 结构型模式    ----  组合的艺术 1.外观模式

  9. VS C++代码能正确编译 但还是显示红色波浪线 提示"无法打开源文件"

    症状细节 我发现很多第三方库的环境部署教程,都会教读者配置 属性VC++目录 -> 包含目录 比如OpenCV的环境配置教程. 这样配置之后能通过编译: 但是,在IDE里,会有一些烦人的红波浪线 ...

  10. Kubernetes集群之清除集群

    清除K8s集群的Etcd集群 操作服务器为:192.168.1.175/192.168.1.176/192.168.1.177,即etcd集群的三台服务器.以下以192.168.1.175为例子. 暂 ...