silverlight 动态线性图 自制控件

本文介绍了一种使用 C# 在 WPF 应用程序中绘制动态更新图表的方法。通过创建并更新一系列 Line 对象来实时显示数据变化,实现了发送与接收速率的可视化监控。

public MainPage()
        {
           
            InitializeComponent();

chartshujuimg41 = new Queue<int> { };
            chartshujuimg42 = new Queue<int> { };
            for (int i = 0; i < 50; i++)
            {
                chartshujuimg41.Enqueue(0);
                chartshujuimg42.Enqueue(0);
            }}

   

     Line[] line51 = new Line[50];
     Line[] line52 = new Line[50];
        /// <summary>
        /// 初始化line,数组
        /// </summary>
        /// <param name="css">canvas</param>
        /// <param name="linearr1"></param>
        /// <param name="linearr2"></param>
     void chushihua(Canvas css,Line[] linearr1,Line[] linearr2)
     {
         Point p = new Point();
         p.X = 250;
         p.Y = 250;
         for (int i = 0; i < 50; i++)
         {
             linearr1[i] = new Line();

             linearr1[i].Stroke = new SolidColorBrush(Colors.Blue);
             linearr1[i].X1 = p.X - i * 4;
             linearr1[i].Y1 = p.Y;
             linearr1[i].X2 = p.X - i * 4;
             linearr1[i].Y2 = p.Y - 100;
             css.Children.Add(linearr1[i]);
         }
         for (int i = 0; i < 50; i++)
         {
             linearr2[i] = new Line();
             linearr2[i].Stroke = new SolidColorBrush(Colors.Red);
             linearr2[i].X1 = p.X - 2 - i * 4;
             linearr2[i].Y1 = p.Y;
             linearr2[i].X2 = p.X - 2 - i * 4;
             linearr2[i].Y2 = p.Y - 100;
             css.Children.Add(linearr2[i]);
         }
         //line1.Stroke = new SolidColorBrush(Colors.Blue);
         //line1.X1 = p.X - 0;
         //line1.Y1 = p.Y;
         //line1.X2 = p.X - 0;
         //line1.Y2 = p.Y - 100;
       
     }

       /// <summary>
       /// 修改每个line的长度
       /// </summary>
       /// <param name="q1">数据一</param>
       /// <param name="q2">数据二</param>
       /// <param name="l1"></param>
       /// <param name="l2"></param>
      void chartline(Queue<int> q1 ,Queue<int> q2,Label l1,Label l2,Line[] linearr1,Line[] linearr2)
      {
       
        
          Point p = new Point();
          p.X = 250;
          p.Y = 250;
          int i=0;
        
       foreach (int item in q1)
       {
           if (i==49)
           {
               l1.Content = "发送:"+item+" kbps";
           }
           linearr1[i].X1 = p.X - i * 4;
           linearr1[i].Y1 = p.Y;
           linearr1[i].X2 = p.X - i * 4;
           linearr1[i].Y2 = p.Y - item;
           i++;
}
              //line[i] = new Line();
              //line[i].Stroke = new SolidColorBrush(Colors.Blue);
        
             // canline.Children.Add(line[i]);
       i = 0;
      
              //line2[i] = new Line();
              //line2[i].Stroke = new SolidColorBrush(Colors.Red);
        foreach (int item in q2)
        {
            if (i == 49)
            {
                l2.Content = "接收:" + item + " kbps";
            }
            linearr2[i].X1 = p.X - 2 - i * 4;
            linearr2[i].Y1 = p.Y;
            linearr2[i].X2 = p.X - 2 - i * 4;
            linearr2[i].Y2 = p.Y - item;
              i++;
}
           
            //  canline.Children.Add(line2[i]);
         

          //foreach (int item in q1)
          //{
          //    Line line = new Line();
          //    line.Stroke = new SolidColorBrush(Colors.Blue);
          //    line.X1 = p.X - 3 * count;
          //    line.Y1 = p.Y;
          //    line.X2 = p.X - 3 * count;
          //    line.Y2 = p.Y - item;
          //    cas.Children.Add(line);
          //    int q2count = 0;
          //    foreach (int item2 in q2)
          //    {
          //        if (q2count == count)
          //        {
          //            Line line2 = new Line();
          //            line2.Stroke = new SolidColorBrush(Colors.Red);
          //            line2.X1 = p.X - 3 - 3 * count;
          //            line2.Y1 = p.Y;
          //            line2.X2 = p.X - 3 - 3 * count;
          //            line2.Y2 = p.Y - item2;
          //            cas.Children.Add(line2);
          //            break;
          //        }
          //        q2count++;
          //    }

          //    count++;
          //}
     
         
       
      
      }

private void button31_Click(object sender, RoutedEventArgs e)
      {
          chushihua(canline5, line51, line52);//先初始化每个line数组

private void button32_Click(object sender, RoutedEventArgs e)//后改变每个line的长度
      {

   Random rd = new Random();
                                chartshujuimg42.Enqueue(rd.Next(0, 100));

                                if (chartshujuimg41.Count > 50)
                                {
                                    chartshujuimg41.Dequeue();

                                }
                                if (chartshujuimg42.Count > 50)
                                {
                                    chartshujuimg42.Dequeue();

                                }

  chartline(chartshujuimg41, chartshujuimg42, labchart41, labchart42, line41, line42);


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值