本篇将利用DynamicDataDisplay 在WPF 中动态生成随机数图表,实现动态生成曲线图。
新建项目将DynamicDataDisplay.dll 加载到引用中
打开MainWindow.xaml 添加命名空间xmlns:d3=“http://research.microsoft.com/DynamicDataDisplay/1.0”。
通过d3:ChartPlotter 创建一个图表框架,在其中添加两条整型坐标轴,X轴:d3:HorizontalIntegerAxis,Y轴:d3:VerticalIntegerAxis。d3:Header 用来设置图表名称,d3:VerticalAxisTitle 用来设置Y轴名称。
直接附上后台代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Research.DynamicDataDisplay.DataSources;
using Microsoft.Research.DynamicDataDisplay;
using System.Threading;
using System.Windows.Threading;
namespace 练习_折线图
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
init();
}
private void init()
{
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += Timer_Tick;
ch1.AddLineGraph(op1,Colors.Blue,2,"随机数");//线条,颜色,宽度,名称
}
Point p;
int i = 0;
Random r = new Random();
private void Timer_Tick(object sender, EventArgs e)
{
i++;
int val = r.Next(20, 40); //生成20-40的随机数
p = new Point(i, val);
op1.AppendAsync(base.Dispatcher, p);
if (i > 20)
ch1.Visible = new Rect(i - 20, 10, 20, 30);//x,y,width,height 这里移动视口i-20要在i大于20的时候进行,否则x的坐标就为负值
}
DispatcherTimer timer = new DispatcherTimer();
ObservableDataSource<Point> op1 = new ObservableDataSource<Point>();
private void button_Click(object sender, RoutedEventArgs e)
{
timer.Start();//启动定时器
}
}
}
最后来看一下效果
说下DynamicDataDisplay资源在哪里找,百度一下你就知道。
谢谢浏览。