Dev ChartControl 绘图小记

WPF 里 Dev ChartControl 的语法和 WinForm 里稍微有些区别,下面是 WPF 里的笔记:

如下图所示,一个最朴素的二维坐标轴出来了:

相应的 XML 代码如下:

<dxc:ChartControl Margin="5,5,5.4,4" Grid.Row="3" Padding="16,5">
   <dxc:ChartControl.Legends>
      <dxc:Legend/>
   </dxc:ChartControl.Legends>
   <dxc:XYDiagram2D Name="Chart">
       <dxc:XYDiagram2D.AxisY>
          <dxc:AxisY2D GridLinesVisible="False" Interlaced="False">
              <dxc:AxisY2D.ConstantLinesBehind>
                 <dxc:ConstantLine Brush="#7F3F5DD9"/>
                 <dxc:ConstantLine Brush="#7F3F5DD9"/>
              </dxc:AxisY2D.ConstantLinesBehind>
          </dxc:AxisY2D>
       </dxc:XYDiagram2D.AxisY>
       <dxc:BarSideBySideSeries2D DisplayName="温度"/>
   </dxc:XYDiagram2D>
</dxc:ChartControl>

一、填加曲线

接触到的绘制曲线的控件都是这个思路:

1,实例化一条曲线,往里面添加点数据。

2,把曲线添加到 Char 里即可。

这里要注意 X 轴的值,如果是时间的话,要正确的格式化,比如添加这么一个点:

series.ArgumentScaleType = ScaleType.Qualitative;
SeriesPoint seriesPoint = new SeriesPoint(time.ToString("HH:mm:ss:fff"), 5);
s1.Points.Add(seriesPoint);

X 轴的时间,精确到了毫秒。如果 X 轴的时间没有正确格式化,就会出现坐标点位置异常等现象。

二、让曲线动起来

思路跟 MSChart 一样,通过不断的移除、添加曲线,实现 “波动” 的效果。就不上代码和图了。

三、增加横向的直线

这个经常用来观察某项不断变化的指标是否超限,所以要画两条表示上下限的直线。

1,在属性, Elements -> AxisY -> ConstantLineBehind(集合) -> 添加 ConstantLine,

直线的 Value ,即在 Y 轴上的位置,可以在这里设定,也能通过代码修改。

2,也可以直接在 XML 代码中,敲:

<dxc:AxisY2D.ConstantLinesBehind>
   <dxc:ConstantLine Brush="#7FD43232"/>
   <dxc:ConstantLine Brush="#7FD43232"/>
</dxc:AxisY2D.ConstantLinesBehind>

就添加了两条直线。直线在 Y 轴的位置,用代码进行修改:

Chart.AxisY.ConstantLinesBehind[0].Value = 2; 
Chart.AxisY.ConstantLinesBehind[1].Value = 15; 

四、设定 Y 轴显示范围

有时候我们不希望 Y 轴的显示范围自适应,就比如想观察某项参数是否超限的时候,如果 Y 轴自适应,添加进去的上下限就不会被显示出来,除非超限了,但此时意义已经不大了。

var range1 = new Range();
range1.MinValue = s1_min;
range1.MaxValue = s1_max;
Chart.AxisY.WholeRange = range1;  //定 Y 轴显示范围

也通过上面的代码可以看到,要先定一个范围,再把范围赋值给 Y 轴,这个思想和先做曲线,再把曲线添加到 Chart 上一脉相承。

如果这样写,就会报错:

Chart.AxisY.WholeRange.MinValue = 2;
Chart.AxisY.WholeRange.MaxValue = 15;

断点显示  Chart.AxisY.WholeRange = null;

五、去掉 Y 轴的区域颜色隔离

1,在属性, Elements -> AxisY -> Interlaced -> 取消勾选,即可。

2,也可以直接在 XML 代码中,敲:Interlaced “False”

取消 Y 轴区域边界也是一样的步骤:

1,在属性, Elements -> AxisY -> GridLinesVisible -> 取消勾选,即可。

2,也可以直接在 XML 代码中,敲:GridLinesVisible “False”

六、在其他电脑上运行报错

在开发环境程序表现正常,一旦部署到了其他机器,程序就报错,这是 DEV 的一个缺点,他会引用一些本地的 dll 文件而不告诉你。

这个时候就要根据错误堆栈的信息,看是少了哪个 dll,从 DEV 的安装目录里,拷贝到程序运行目录里就可以了。

七、动态曲线图卡顿

我在线程中操作曲线,要用委托,刚开始用的是 Invoke,卡的很,后来改成 BeginInvoke,就流畅了起来。

发表评论

Powered by WordPress | Theme Revised from Doo

苏ICP备18047621号

Copyright © 2017-2024 追光者博客