找回密码
 立即注册

QQ登录

只需一步,快速开始

kyb11111

中级会员

28

主题

72

帖子

534

积分

中级会员

积分
534

活字格认证

kyb11111
中级会员   /  发表于:2014-12-17 11:35  /   查看:7601  /  回复:8

如何为Chart添加一个标签 在X轴上 鼠标悬停的位置,最好可以提供解决方案

本帖子中包含更多资源

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

x

8 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-12-17 14:19:00
沙发
回复 1楼kyb11111的帖子

你可以自定义Tooltip,当鼠标Hover的时候,将自定义的Tooltip展示出来。
主要是在C1Chart的View层添加一个ChartPanel,然后把你需要展示的数据放到这个Panel里。
代码参考:
  1.    var pnl = new ChartPanel();

  2.             var obj = new ChartPanelObject()
  3.             {
  4.                 HorizontalAlignment = HorizontalAlignment.Right,
  5.                 VerticalAlignment = VerticalAlignment.Bottom
  6.             };

  7.             var bdr = new Border()
  8.             {
  9.                 Background = new SolidColorBrush(Colors.LightYellow) { Opacity = 0.6 },
  10.                 BorderBrush = new SolidColorBrush(Colors.Black),
  11.                 BorderThickness = new Thickness(1, 1, 2, 2),
  12.                 Padding = new Thickness(3)
  13.             };

  14.             var sp = new StackPanel();

  15.             var tb1 = new TextBlock();
  16.             var bind1 = new Binding();
  17.             bind1.Source = obj;
  18.             bind1.StringFormat = "x={0:#.##}";
  19.             bind1.Path = new PropertyPath("DataPoint.X");
  20.             tb1.SetBinding(TextBlock.TextProperty, bind1);

  21.             var tb2 = new TextBlock();
  22.             var bind2 = new Binding();
  23.             bind2.Source = obj;
  24.             bind2.StringFormat = "y={0:#.##}";
  25.             bind2.Path = new PropertyPath("DataPoint.Y");
  26.             tb2.SetBinding(TextBlock.TextProperty, bind2);

  27.             var lb0 = new TextBlock();
  28.             lb0.Text = "Value";
  29.             lb0.FontSize = 12;
  30.             lb0.FontWeight = FontWeights.Bold;
  31.             lb0.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;

  32.             var lb1 = new TextBlock();
  33.             lb1.Text = "Description";
  34.             lb1.FontSize = 12;
  35.             lb1.FontWeight = FontWeights.Bold;
  36.             lb1.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;

  37.             var lb2 = new TextBlock();
  38.             lb2.Text = "Test";
  39.             lb2.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;

  40.             sp.Children.Add(lb0);
  41.             sp.Children.Add(tb1);
  42.             sp.Children.Add(tb2);
  43.             sp.Children.Add(lb1);
  44.             sp.Children.Add(lb2);

  45.             bdr.Child = sp;

  46.             obj.Content = bdr;
  47.             obj.DataPoint = new Point();
  48.             obj.Action = ChartPanelAction.MouseMove;
  49.             obj.Attach = ChartPanelAttach.DataXY;

  50.             pnl.Children.Add(obj);
  51.             this.c1Chart1.View.Layers.Add(pnl);
复制代码


另外可以参考我们的中文博客,C1Chart在WPF平台下画ToolTips:
http://blog.gcpowertools.com.cn/ ... -in-c1wpfchart.aspx
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
kyb11111
中级会员   /  发表于:2014-12-17 17:00:00
板凳
回复 2楼Alice的帖子

我试过例子和我们的要求有些出入,比如说X轴绑定时间,在chart中选取一个点,就可以为这个点添加一个事件标签,标签的位置在Chart中对应的时间点,就是标签显示在Chart中X轴的位置,能否提供一个Demo
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-12-17 18:03:00
地板
回复 3楼kyb11111的帖子

很抱歉给你带来的不便,我没有现成的Demo。
从图片来看,你是需要展示X轴的时间数据。博客上Tooltips你可以自定义,比如你可以用TextBlock显示X轴的时间点,只需要将StringFormat改成时间的格式即可。该代码我应用到LineChart类型下,也是可以使用的。

如果你对此依然存在问题并且需要完整帮你实现需求,可以将图表类型、数据源(X轴和Y轴的数据)具体一点发给我们,我们可以根据你提供的信息,协助你完成Demo。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
kyb11111
中级会员   /  发表于:2014-12-17 18:12:00
5#
回复 4楼Alice的帖子

如果把Tooltip固定到某一个时间点上 比如说我就想放在某一天所对应的X轴上
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-12-18 10:55:00
6#
回复 5楼kyb11111的帖子

在2楼的代码里有这样一段:
  1.    obj.Content = bdr;
  2.             obj.DataPoint = new Point();
  3.             obj.Action = ChartPanelAction.MouseMove;
  4.             obj.Attach = ChartPanelAttach.DataXY;
复制代码


Action属性可以用来展示Tooltip的时机,将其改为None,就是固定的。
DataPoint属性就是指展示Tootip的位置,比如new Point(200,0),就是出现在X轴=200的位置。

附件是制作的Demo,请参考:

本帖子中包含更多资源

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

x
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
kyb11111
中级会员   /  发表于:2014-12-18 13:09:00
7#
回复 6楼Alice的帖子

如果X轴绑定的是时间怎么办 Point 只能是double值 请问该如何转换
回复 使用道具 举报
kyb11111
中级会员   /  发表于:2014-12-18 13:52:00
8#
回复 7楼kyb11111的帖子

已经解决 ToOAData
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-12-18 14:31:00
9#
回复 8楼kyb11111的帖子

谢谢反馈。
如果没有什么问题,此问题结束。
新问题请开新帖。

评分

参与人数 1满意度 +5 收起 理由
kyb11111 + 5 非常感谢

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部