效果如下:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp2" xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" x:Class="WpfApp2.MainWindow" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800" > <Grid> <dxc:ChartControl Name="chart2" BorderThickness="2" HorizontalAlignment="Left" > <dxc:XYDiagram2D EnableAxisXNavigation="True" > <dxc:XYDiagram2D.AxisX> <dxc:AxisX2D StickToEnd="True"><!--自动滚到最右边--> <dxc:AxisX2D.WholeRange> <dxc:Range x:Name="xyRange" SideMarginsValue="1" /> <!--距离最右边的长度--> </dxc:AxisX2D.WholeRange> </dxc:AxisX2D> </dxc:XYDiagram2D.AxisX> <dxc:XYDiagram2D.AxisY> <dxc:AxisY2D Interlaced="True" > <dxc:AxisY2D.Title> <dxc:AxisTitle Content="Y轴单位" /> </dxc:AxisY2D.Title> </dxc:AxisY2D> </dxc:XYDiagram2D.AxisY> <dxc:LineSeries2D Name="series1" ArgumentScaleType="Qualitative" DisplayName="series1"> <dxc:LineSeries2D.LineStyle> <dxc:LineStyle Thickness="2" /> </dxc:LineSeries2D.LineStyle> </dxc:LineSeries2D> </dxc:XYDiagram2D> <!-- 图例--> <dxc:ChartControl.Legend> <dxc:Legend Visibility="Hidden" /> </dxc:ChartControl.Legend> </dxc:ChartControl> </Grid> </Window>

using DevExpress.Xpf.Charts; using System; using System.Threading; using System.Threading.Tasks; using System.Windows; namespace WpfApp2 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); var task = Task.Run(() => { double x = 0; int start = Environment.TickCount; while (true) { int time = Math.Abs(Environment.TickCount - start); if (time >= 1000 )//1秒记录一个点 { start = Environment.TickCount; this.Dispatcher.Invoke(new Action(() => { x = x + 0.1; //series1.Points.Add(new SeriesPoint(DateTime.Now.ToString("hh:mm:ss fff"), Math.Sin(x) * 100 + 100));//X轴 时分秒毫秒 series1.Points.Add(new SeriesPoint(DateTime.Now.ToString("hh:mm:ss"), Math.Sin(x) * 100 + 100));//X轴 时分秒 })); } Thread.Sleep(1); } }); } } }
如果想保存数据点可以增加个按键
<Button Grid.Column="1" Content="记录数据" Height="30" VerticalAlignment="Top" Click="Button_Click" />

private void Button_Click(object sender, RoutedEventArgs e) { // Configure save file dialog var dlg = new SaveFileDialog { FileName = "", DefaultExt = ".csv", Filter = "CSV Files|*.csv|TSV Files|*.tsv|Text Files|*.txt|All Files|*.*" }; // Default file name // Default file extension // Filter files by extension // Show save file dialog var result = dlg.ShowDialog(); // Process save file dialog results if (result == true) { // Save document var filename = dlg.FileName; FileStream savefs = new FileStream(dlg.FileName, FileMode.Create); StreamWriter savesw = new StreamWriter(savefs); for (int i = 0; i < series1.Points.Count; i++) { savesw.Write(series1.Points[i].Argument + ","); savesw.Write(series1.Points[i].Value.ToString("0.00") + ","); savesw.Write("\r\n"); } savesw.Flush(); savesw.Close(); savefs.Close(); Title = filename;//显示全路径 } }
保存如下:
源码下载地址:https://github.com/lizhiqiang0204/WPF-use-devexpress-to-charts