找回密码
 立即注册

QQ登录

只需一步,快速开始

jacky_zh

中级会员

20

主题

54

帖子

508

积分

中级会员

积分
508

[已处理] chart marker

jacky_zh
中级会员   /  发表于:2016-7-19 16:41  /   查看:4164  /  回复:5
目前有2个问题,第一个问题是:当鼠标移到折线上,显示坐标信息x轴时间格式无法显示,如图


第二个问题:


当我鼠标离开这个折线图的时候,依然可以看到坐标信息。我只需要看到,鼠标移到折线的时候显示,坐标信息,如图

我附属一个demo。希望能帮我解决,谢谢!!!!

本帖子中包含更多资源

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

x

5 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2016-7-19 17:33:31
沙发
谢谢您提供的图片和Demo。
对于您提出的2个问题,请参考如下:
1.由于X轴是日期轴(OADate),DataPoint.X其实一个OADate,所以这里需要做转换(设置Binding的Converter属性)。将OADate转成Date类型,否则此时节点的换算会不正确。
详细的步骤和代码,你可以参考产品博客,链接如下(里面有示例代码):
http://blog.gcpowertools.com.cn/ ... tWPF_DateAxis2.aspx

2.默认MouseMove的行为显示Tooltip,鼠标离开,tooltip显示在最后的move的位置,不会消失。
如果你希望消失,就在chart的mouseleave事件里去设置它的DataPoint初始化。
添加代码参考:
  1. void c1Chart1_MouseLeave(object sender, MouseEventArgs e)
  2.         {
  3.             ChartPanelObject obj = ((c1Chart1.View.Layers[0] as ChartPanel).Children[0] as ChartPanelObject);
  4.             obj.DataPoint = new Point();
  5.         }
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
jacky_zh
中级会员   /  发表于:2016-7-20 09:42:30
板凳
Alice 发表于 2016-7-19 17:33
谢谢您提供的图片和Demo。
对于您提出的2个问题,请参考如下:
1.由于X轴是日期轴(OADate),DataPoint.X ...

首先谢谢您,美女。但是关于鼠标离开,不显示Tooltip.我的是离开折线,这条线。不是离开整个chart控件。
请问怎么做呀

本帖子中包含更多资源

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

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-7-20 11:35:01
地板
jacky_zh 发表于 2016-7-20 09:42
首先谢谢您,美女。但是关于鼠标离开,不显示Tooltip.我的是离开折线,这条线。不是离开整个chart控件。
...

您这种需求无法使用默认的Tooltip完成,只能自己写代码逻辑实现。
考虑到您的需求,有两种方案,您可以根据自己的需求去决定。

第一种,基本思路就是使用ToolTipService去设置ToolTip的内容以及显示的位置,步骤请参考产品博客:
http://blog.gcpowertools.com.cn/ ... tWPF_DateAxis3.aspx

针对您的Demo,基本步骤就是添加如下代码:
1.获取序列,监听事件
  1. DataSeries ds= (this.c1Chart1.Data.Children[0] as DataSeries);
  2.            ds.PlotElementLoaded += ds_PlotElementLoaded;
复制代码


2.在事件里去做判断
  1.   void ds_PlotElementLoaded(object sender, EventArgs e)
  2.         {
  3.             PlotElement pe = sender as PlotElement;
  4.             if (pe is Lines)
  5.             {
  6. //在这里去计算X,Y轴的值,然后显示出来               
  7. object value = "TestToolTip" ;
  8.                 ToolTipService.SetToolTip(pe, value);
  9.                 ToolTipService.SetPlacement(pe, System.Windows.Controls.Primitives.PlacementMode.MousePoint);           
  10.             }
  11.         }
复制代码


由于是给线设置的ToolTip,线很细,所以鼠标刚好在线上才会出现ToolTip。

第二种:基本思路就是将之前的Action的MouseMove改成None,然后使用鼠标的相关事件来控制自己的逻辑(您的Demo需要使用ChartPanel的MouseMove)。
主要就是在鼠标MouseMove的时候判断位置,是否移动到序列的线上,如果移动到线上,就显示ToolTip。
判断点和操作行为,您可以参考产品博客:http://blog.gcpowertools.com.cn/ ... hartWPF_Marker.aspx

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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-7-20 14:07:33
5#
本帖最后由 Alice 于 2016-7-20 14:08 编辑
jacky_zh 发表于 2016-7-20 09:42
首先谢谢您,美女。但是关于鼠标离开,不显示Tooltip.我的是离开折线,这条线。不是离开整个chart控件。
...

根据电话沟通,在之前提供的Demo基础上做了测试Tooltip在Hover到线上可以出现。
鼠标必须放在线上才可以出现,离开线外即使是1个pixcel也不行。
Demo:

效果如图:


本帖子中包含更多资源

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

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

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2016-7-20 16:08:13
6#
Alice 发表于 2016-7-20 11:35
您这种需求无法使用默认的Tooltip完成,只能自己写代码逻辑实现。
考虑到您的需求,有两种方案,您可以 ...

电话沟通不知道ToolTip如何显示X,Y的值。
之前发的博客链接(http://blog.gcpowertools.com.cn/ ... hartWPF_Marker.aspx)里有介绍Chart.View.PointToData方法,可以将鼠标点转换成数据点。

然后你的这个Demo的X轴是时间,所以拿到数据点的X轴是OADate,需要按照我们之前说的转成Date。转换的算法之前也提到了。
代码参考:
  1.         void ds_PlotElementLoaded(object sender, EventArgs e)
  2.         {
  3.             PlotElement pe = sender as PlotElement;
  4.             if (pe is Lines) {                  
  5.                 pe.MouseEnter += (s1, e1) =>
  6.                 {
  7.                  Point mouse = c1Chart1.View.PointToData(e1.GetPosition(this.c1Chart1));
  8.                  double v = mouse.X;
  9.                  DateTime dt = !double.IsNaN(v) ? DateTime.FromOADate(v) : DateTime.Now;   
  10.                  object value = "x=" + dt.ToShortDateString() + "\r\n" + "value=" + mouse.Y.ToString("f2");

  11.                  ToolTipService.SetToolTip(pe, value);
  12.                  ToolTipService.SetPlacement(pe, System.Windows.Controls.Primitives.PlacementMode.MousePoint);
  13.                 };         

  14.             }
  15.         }
复制代码



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

葡萄城控件服务团队

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