This is a known issue. It is logged here
in our Public Issue Tracker. Presently you can can workaround it the following way:
var dataX = this.chart.DefaultView.ChartArea.AxisX.ConvertPhysicalUnitsToData(position.X);
var dataY = this.chart.DefaultView.ChartArea.AxisY.ConvertPhysicalUnitsToData(position.Y);
double xMin = _Chart.DefaultView.ChartArea.AxisX.ActualMinValue;
double yMax = _Chart.DefaultView.ChartArea.AxisY.ActualMaxValue;
var physicalX = this.chart.DefaultView.ChartArea.AxisX.ConvertDataUnitsToPhysical(dataX - xMin);
var physicalY = this.chart.DefaultView.ChartArea.AxisY.ConvertDataUnitsToPhysical(yMax - dataY);
Please note that, due to the nature of floating-point calculations, physicalX/Y will be very close to poistion.X/Y but probably will not be equal. The error should be smaller than 10^-3.
On as side note, you may be interested in reviewing our newer charting solution - RadChartView (represented by the RadCartesianChart, RadPolarChart and RadPieChart classes). The new control was built from the ground-up to provide significantly better performance, easy to use API and support for implicit styles. Additionally RadCartesianChart provides a built-in customizable Crosshair behavior which you can see in this online demo. A sample project demonstrating the feature is also available here in our XAML SDK on GitHub.
I hope you will find the RadChartView suitable for your project.
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WPF.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>