WPF動態折線圖


此項目源碼下載地址:https://github.com/lizhiqiang0204/WpfLineChartV1.1

效果圖如下:

 

此項目把折線圖制作成了一個控件,在主界面設置好參數直接調用即可,下面是主程序片段

        public MainWindow()
        {
            InitializeComponent();
            userControl1_Para.xGrap = 2;//設置X軸相鄰采集點的間隔
            userControl1_Para.xGrapLable = 100;//設置X軸時間標簽的間隔
            userControl1_Para.xGrapLablePoint = userControl1_Para.xGrapLable/ userControl1_Para.xGrap;//相鄰兩個時間標簽內有多少個采集點
            userControl1_Para.xWidth = userControl.Width - 50;
            userControl1_Para.yGrap = -10;
            userControl1_Para.yStartValue = 100;
            userControl1_Para.yGrapLable = 50;
            userControl1_Para.yLables = ((int)userControl.Height - 50) / userControl1_Para.yGrapLable;
            userControl.myCanvasInit(userControl1_Para);

        }
        private void timer_Tick(object sender, EventArgs e)
        {
            y = y + 0.1;

            //隨機生成Y坐標
            //collectPoint.point = new Point(i, (new Random()).Next(0, 100));
            collectPoint.point = new Point(x, Math.Sin(y)*100+100);
            collectPoint.curTime = DateTime.Now;
            userControl.AddPoint1(collectPoint);
        }

類庫添加點的函數

        public void AddPoint1(CollectPoint collectPoint)
        {
            x = x + userControl1_Para.xGrap;
            collectPoint.point.X = x;

            //移動背景不移動點
            double xMove = collectPoint.point.X  * (-1) + userControl1_Para.xWidth;
            _myPolyline.Points.Add(collectPoint.point);//添加新的數據點
           _myCanvas.Margin = new Thickness(xMove, 0, 0, 0);//設置外邊距實現移動,放大縮小

            //移動X軸標簽背景
            TextBlock xText = new TextBlock();
            xText.Visibility = Visibility.Hidden;
            xText.SetValue(Grid.RowProperty, 1); //設置按鈕所在Grid控件的行
            xGrid.Children.Add(xText);//為每個點添加對應的時間值
            xText.Text = collectPoint.curTime.ToString("HH:mm:ss");
            xText.Margin = new Thickness(collectPoint.point.X, 0, 0, 0);
            collectPoints.Add((new CollectPoint() { point = collectPoint.point, curTime = collectPoint.curTime }));
            xLableCanvas.Margin = new Thickness(xMove, 0, 0, 0);//設置外邊距實現移動,放大縮小

            if (xMove % userControl1_Para.xGrapLable == 0)
                xText.Visibility = Visibility.Visible;

            if (collectPoint.point.X > userControl1_Para.xWidth)
            {
                _myPolyline.Points.RemoveAt(0);
                collectPoints.RemoveAt(0);
                xGrid.Children.RemoveAt(0);
            }
        }

 

本人也是新手,代碼規范寫的不是很好,見諒!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM