原文:封装: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. 三、requests模块

    Requests: 让 HTTP 服务人类 虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “ ...

  2. Go Programming Language 2

    [Go Programming Language 2] 1.In Go, the sign of the remainder is always the same as the sign of the ...

  3. sql字符转义

    /** * sql 内的like % 代表一个或多个字符, _代表一个字符,这都是需要转义的 * @param s * @return */ public static String escapeSp ...

  4. 使用apache.tika判断文件类型

    一. 判断文件类型一般可采用两种方式 1. 后缀名判断 简单易操作,但无法准确判断类型 2. 文件头信息判断 通常可以判断文件类型,但有些文件类型无法判断(如word和excel头信息的前几个字节是一 ...

  5. scikit-leanr 库中的 make_blobs() 函数

    sklearn.datasets.make_blobs() 是用于创建多类单标签数据集的函数,它为每个类分配一个或多个正态分布的点集. sklearn.datasets.make_blobs( n_s ...

  6. Android架构师吐槽腾讯王者荣耀的程序员,排位匹配算法怎么搞的,每次都输

    腾讯王者荣耀的开发来来来出来聊聊,真是日了狗了,多次离上王者还差两三颗星的时候队友就开始水的一塌糊涂,对面就牛逼的不行. 又连跪回去了,被对面把屎都打出来了,实在忍不住来吐槽,你们这个排位匹配算法到底 ...

  7. wordpress迁移后登陆时出现Forbidden You don’t have permission to access /wp-login.php on this server

    之前在vps上,最近迁移到了php虚拟主机上,迁移后发现无法登陆后台出现403:Forbidden You don’t have permission to access /wp-login.php ...

  8. VS操作中遇到的问题及解决

    1.无法解析的外部符号 _main,该符号在函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中被引用 2. /ZI ...

  9. 15-C#笔记-结构体

    示例: using System; using System.Text; struct Books { private string title; // 支持 public private strin ...

  10. Navicat Premium永久激活方式

    今天安装完Navicat Premium,运行时出现只能用14天的信息,所以就比较生气,只能用14天,那我还下你干啥,所以就查教程,弄了个破解工具,最后大功告成,应该是可以永久使用了,具体的教程看下 ...