原文:封装: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. 海思3519 qt ffmpeg 软解码播放avi

    在海思3519上基于qt采用ffmpeg对avi进行解码显示,其中ffmpeg的配置,qt的配置在前文中已经说明,在此不再赘述. 解码 解码在单独的线程中进行,具体的代码如下: void VideoP ...

  2. 利用mycat读写分离搭建wordpress博客网站

    实验环境 以下配置都是建立在mariadb主从没有问题的情况下: .三台主机:在三台机器/etc/hosts添加以下3条主机信息(mycat和wordpress在一台机器上面) mycat:192.1 ...

  3. 《linux就该这么学》课堂笔记13 网络会话、ssh、远程会话

    1.常见的网卡绑定驱动有三种模式—mode0.mode1和mode6 mode0(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术. ...

  4. 用js怎么来判断我已点击了窗体中“关闭”按钮?

    onbeforeunload 事件在即将离开当前页面(刷新或关闭)时触发. 该事件可用于弹出对话框,提示用户是继续浏览页面还是离开当前页面. 对话框默认的提示信息根据不同的浏览器有所不同,标准的信息类 ...

  5. Android: Error inflating class android.support.v4.view.ViewPager 问题的解决方法

    ViewPager是个很好很强大的控件,很多应用用它来实现很酷的效果,但是很多情况下在运行时会遇到Error inflating class android.support.v4.view.ViewP ...

  6. nginx 搭建上传服务器

    nginx webdav 服务器搭建 该模块可以为Http webDAV 增加PUT,DELETE,MKCOL,COPY和MOVE等方法.模块在默认编译的情况下是不被包含的,需要指定编译 ./conf ...

  7. JS 中的 new 操作符

    按照javascript语言精粹中所说,如果在一个函数前面带上new来调用该函数,那么将创建一个隐藏连接到该函数的prototype成员的新对象,同时this将被绑定到那个新对象上.这个话很抽象,我想 ...

  8. maven jar包冲突的发现与解决[工具篇]

    本文是我的第177篇文章. 关于jar冲突排查解决的问题,相信很多小伙伴也都知道有一些,无非就是两类:命令 or 工具. 命令方式比如: mvn dependency:tree 工具方式比如: Mav ...

  9. excel的IRR函数

    office官网找到IRR的介绍 https://support.office.com/zh-cn/article/irr-%E5%87%BD%E6%95%B0-64925eaa-9988-495b- ...

  10. 网络协议 7 - UDP 协议

    网络协议五步登天路,我们一路迈过了物理层.链路层,今天终于到了传输层.从这一层开始,很多知识应该都是服务端开发必备的知识了,今天我们就一起来梳理下.     其实,讲到 UDP,就少不了 TCP.这俩 ...