原文:封装: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. shell脚本遇到问题"$'\r': command not found"

    shell脚本写得一切正常,但是一执行就报错: line: XXX "$'\r': command not found" 问题原因:文件格式问题(虽然在window和linux上选 ...

  2. [转]【会话技术】Cookie技术

    建立时间:6.29 & 6.30 一.会话技术简介 1.存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪  里?因为Http协议是无状态的,也就是说 ...

  3. Leetcode周赛165

    目录 找出井字棋的获胜者 思路 代码 不浪费原料的汉堡制作方案 思路 代码 统计全为 1 的正方形子矩阵 思路 代码 分割回文串 III 思路 代码 找出井字棋的获胜者 思路 模拟. 代码 class ...

  4. MongoDB在windows及linux环境下安装

    linux下安装配置 整理中... windows下安装配置 1.下载: https://www.mongodb.com/download-center?jmp=nav 2.解压到D盘 3.D:\下创 ...

  5. NOIP 2013 积木大赛

    洛谷 P1969 积木大赛 洛谷传送门 JDOJ 2229: [NOIP2013]积木大赛 D2 T1 JDOJ传送门 题目描述 春春幼儿园举办了一年一度的"积木大赛".今年比赛的 ...

  6. ESA2GJK1DH1K升级篇: IAP详解

    前言: 源码下载链接: https://gitee.com/yang456/STM32_IAP_Learn.git 后期所有出售的升级程序皆在此代码之上进行优化和开发 请必须把此文章各个的地方的说明看 ...

  7. js 将图片转换为 base64

    var img = document.getElementById('s_lg_img'); function getBase64Image(img) { var canvas = document. ...

  8. 【DP】【P5615】 [MtOI2019] 时间跳跃

    Description 给定 \(n\) 条边,第 \(i\) 条边的长度为 \(i\),每条边都有 \(50\%\) 的概率被选择,求如果选出的边能组成一个平面凸多边形,则方案的权值是方案中边的数量 ...

  9. 解决github release下载慢/下载失败的问题

    在使用github时,有时作者会在release中提供编译好的程序,以https://github.com/AkikoZ/alfred-web-search-suggest为例,是一个alfred3的 ...

  10. sql语句练习50题(Mysql版) 围观

    表名和字段 –.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –.课程表 Course(c_id,c_name,t_id) ...