I will try to answer all of your questions in the order they appeared.
in this scenario, it seems the ActualRange doesn't get initialized and returns zero
The ActualRange may not be ready in the loaded event for some reasons, perhaps the chart is not yet data bound and there are no data points. If there are no data points - the axis cannot possible select an actual range, the actual range is not yet known. The proper event is the ActualRangeChanged event, as you have already discovered.
Additionally, with Loaded event handler, the method ConvertDataToPoint doesn't work as expected, the calculated point gets NaN as x coordinate value.
The conversion methods rely on a valid actual range and valid layout. If at the moment you used the convert method the actual range was not yet ready - this is why you get these results, the actual range is not yet known and the convert method cannot possibly do the calculations.
I tried to add annotation in the vertical axis's ActualRangeChanged event handler ... but an exception is thrown ...
It seems that you have stumbled upon a bug in the control
. I have logged this in our feedback portal where you can vote and track its status. I have also updated your Telerik points. A simple way to work-around this is to wrap the code in a BeginInvoke:
sender, Telerik.Charting.NumericalRangeChangedEventArgs e)
I just want to make sure that you actually need the event to add the annotation. Does the position of the annotation rely on the actual range of the axis? If not, perhaps you should not use the event at all and add the annotations earlier. Let us know if you need more information.
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.