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,就流畅了起来。