我尝试使用其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事件上执行它,但我得到了同样的错误。
答案 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有效。我不确定这是否是正确的解决方案,但它对我有用。