找回密码
 立即注册

QQ登录

只需一步,快速开始

admin 讲师达人认证 悬赏达人认证 活字格认证 SpreadJS 开发认证
管理员   /  发表于:2012-10-8 22:08  /   查看:6478  /  回复:0
本文主要介绍如何给 C1Chart for Silverlight 添加鼠标跟踪行为,最终会显示一条垂直红线以及红线与各个系列的交点,主要步骤:
1、添加垂直线
2、添加垂直线和系列交点的显示
3、在鼠标移动时动态改变垂直线和交点标识的位置

  1.     public partial class MainPage : UserControl
  2.     {
  3.         ChartPanel pnl = new ChartPanel();        

  4.         List<Ellipse> markers;

  5.         public MainPage()
  6.         {
  7.             InitializeComponent();

  8.             AddLine();

  9.             AddMarkers();            

  10.             chart.View.Layers.Add(pnl);

  11.             chart.MouseMove += new MouseEventHandler(chart_MouseMove);
  12.         }

  13.         void AddLine()
  14.         {
  15.             Point p = new Point(0, double.NaN);

  16.             var dt = (DataTemplate)Resources["line"];
  17.             var cpo = (ChartPanelObject)dt.LoadContent();
  18.             cpo.DataPoint = p;
  19.             cpo.Action = ChartPanelAction.MouseMove;
  20.             cpo.Attach = ChartPanelAttach.DataXY;
  21.             pnl.Children.Add(cpo);
  22.         }

  23.         void AddMarkers()
  24.         {
  25.             markers = new List<Ellipse>();

  26.             for (int i = 0; i < chart.Data.Children.Count; i++)
  27.             {
  28.                 Ellipse ep = new Ellipse();
  29.                 ep.Width = 50;
  30.                 ep.Height = 50;
  31.                 ep.Stroke = new SolidColorBrush(Colors.Blue);
  32.                 ep.Fill = new SolidColorBrush(Color.FromArgb(64, 0, 0, 255));
  33.                 markers.Add(ep);
  34.                 chart.View.Children.Add(ep);
  35.             }
  36.         }

  37.         void SetMarkerPosition(Point pt)
  38.         {
  39.             double dis1;

  40.             for (int i = 0; i < markers.Count; i++)
  41.             {
  42.                 int p = chart.View.DataIndexFromPoint(pt, i, MeasureOption.X, out dis1);
  43.                 Point ps1 = chart.View.DataIndexToPoint(i, p);

  44.                 Canvas.SetLeft(markers[i], ps1.X - markers[i].Width / 2);
  45.                 Canvas.SetTop(markers[i], ps1.Y - markers[i].Height / 2);
  46.             }
  47.         }

  48.         void chart_MouseMove(object sender, MouseEventArgs e)
  49.         {            
  50.             SetMarkerPosition(e.GetPosition(this));
  51.         }
  52.         
  53.     }
复制代码


运行截图:


源码下载:VS2010 + Silverlight 5.0 + C1 Studio for Silverlight 2012V2

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部