如何从X轴上的DateTime值获取像素位置?

时间:2017-11-23 22:20:14

标签: c# datetime charts position pixel

我尝试使用其X值(DateTime)检索DataPoint图表上的像素位置。 我在绘制图表后使用此代码,但是我的数字非常大:

DateTime date = ... ; // DateTime of the DataPoint, I verified the date is correct and the chart contains it.    
var pixelsPosition = ChartAreas[0].AxisX.ValueToPixelPosition(date.ToOADate()); 
// Here pixelsPosition is a very large number, above 600 000.

这些是图表设置:

Series[0].XValueType = ChartValueType.DateTime;
Series[0].IsXValueIndexed = true;

图表有大约2000点。

我使用相同的代码使用Y值检索DataPoint的像素位置并且它可以正常工作。我确定这是一个愚蠢的问题,但我无法弄清楚。

Y轴的工作代码

double yValue = 100;
double pixPositionY = ChartAreas[0].AxisY.ValueToPixelPosition(yValue); // THIS WORKS

我做错了什么?

修改 我读到ValueToPixelPosition方法仅适用于Paint Events,我试图在Paint和PrePaint事件上执行它,但我得到了同样的错误。

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法:

DateTime date;
int pixelPositionX = 0;
var point = Series[0].Points.Where(X => X.XValue == date.ToOADate()).FirstOrDefault();
var index = (point != null) ? Series[0].Points.IndexOf(point) : -1;

if (index > -1)
    pixelPositionX  = (int)ChartAreas[0].AxisX.ValueToPixelPosition(index + 1);

这为我提供了DataPoint在屏幕上的正确位置。如果我将dataPoint索引作为参数而不是转换为OADate的datetime值传递,则ValueToPixelPosition有效。我不确定这是否是正确的解决方案,但它对我有用。