zoukankan      html  css  js  c++  java
  • WPF之动态加载曲线

    首先说一下思路: 先创建一个控件(其实就是一个canvas),在canvas里面生成一条线,给这条线绑定一个PointCollection,在主界面中用一个定时器改变这个PointCollection的值就行了.

    1.创建的控件

     public partial class BrokenLine : UserControl
        {                     
            public BrokenLine()
            {
                InitializeComponent();
                this.Loaded += BrokenLine_Loaded;
            }
            private Brush mBrushes;
            private PointCollection coordinatePoints = new PointCollection();
            Polyline curvePolyline = new Polyline();
            public BrokenLine(PointCollection pointCollection,Brush brushes)
            {
                InitializeComponent();
                this.Loaded += BrokenLine_Loaded;
                coordinatePoints = pointCollection;
                mBrushes = brushes;
            }
            private void BrokenLine_Loaded(object sender, RoutedEventArgs e)
            {
                curvePolyline = new Polyline();
                curvePolyline.Stroke = mBrushes;
                curvePolyline.StrokeThickness = 1;
                Canvas.SetLeft(curvePolyline, 5);
                Canvas.SetTop(curvePolyline, 5);
                curvePolyline.Points = coordinatePoints;
                chartCanvas.Children.Add(curvePolyline);
            }
        }
    View Code

    2.主界面的代码

      BrokenLine xinlv_brokenLine = new BrokenLine(mXL.CoordinatePoints, new SolidColorBrush((Color)ColorConverter.ConvertFromString("#35CD75")));
                        Canvas.SetTop(xinlv_brokenLine, 20);
                        canvas_TZ.Children.Add(xinlv_brokenLine);
    实例化一个控件
       if (points!=null && points.Count>10)///points作为一个缓存集合
                    {
                        if (points.Count >= 10)
                        {
                            for (int k = 0; k < 10; k++)
                            {
                                CoordinatePoints.Add(points[k]);
                                if (coordinatePoints.Count > mShowLength)//mShowLength控制最多能显示的长度(点的个数)
                                {
                                    AddCurvePoint(true, 0.8);//将要显示的点全部向前移动一位
                                }
                            }
                            points.RemoveRange(0, 10);
                        }
                        else {
                            for (int k = 0; k < points.Count; k++)
                            {
                                CoordinatePoints.Add(points[k]);
                                if (coordinatePoints.Count > mShowLength)
                                {
                                    AddCurvePoint(true, 0.8);
                                }
                            }
                            points.Clear();
                        }
    
                    }
    定时器代码
           private void AddCurvePoint(Boolean isMeet, double length)
            {
                if (isMeet)
                {
                    CoordinatePoints.RemoveAt(0);
                    for (int i = 0; i < CoordinatePoints.Count-1; i++)
                    {
                        CoordinatePoints[i] = new Point(CoordinatePoints[i].X - length, CoordinatePoints[i].Y);
                    }
                    CoordinatePoints[coordinatePoints.Count-1] = new Point(CoordinatePoints[coordinatePoints.Count-1].X - length*mX, CoordinatePoints[coordinatePoints.Count - 1].Y);
                    mX++;
                }
    
    
            }
    View Code
  • 相关阅读:
    Leetcode 15 3Sum
    Leetcode 383 Ransom Note
    用i个点组成高度为不超过j的二叉树的数量。
    配对问题 小于10 1.3.5
    字符矩阵的旋转 镜面对称 1.2.2
    字符串统计 连续的某个字符的数量 1.1.4
    USACO twofive 没理解
    1002 All Roads Lead to Rome
    USACO 5.5.1 求矩形并的周长
    USACO 5.5.2 字符串的最小表示法
  • 原文地址:https://www.cnblogs.com/lzyqq/p/11377258.html
Copyright © 2011-2022 走看看