Thanks for your answer.
Although your solution may be suitable in simple scenarios, I fear it does not scale well in my case.
All your examples somehow aim at static data - in my case I have to bind the lines and labels to an enumeration. The number of items in this enumeration may change at any time - so I cannot define them in xaml code. I have to dynamically generate them at runtime. As I am displaying live values (updating with every UI rendering), I have some tight performance requirements.
At the moment, I update the limits before the chart is redrawn. To get a reasonable performance, I am reusing existing annotation instances. This is relatively simple as there is only a single type of annotation (at the moment). But if I have to use different types of annotations, this will get ugly...
Why can't there be a combined annotation having line and label? (Indeed, it would be best if all annotations could be drawn into a single canvas, not having a new object for every annotation...)