#annotations #customization
#аннотации #настройка
Вопрос:
Я некоторое время бился головой об это, и я подумал, что у кого-то еще может возникнуть эта проблема в будущем. Я публикую свою полную проблему и решение для тех, кто придет позже, и предлагаю место для любых улучшений / упрощений, если кто-нибудь найдет его.
Проблема заключалась в том, что я пытался нарисовать вертикальные обозначения на моей диаграмме. Я не хочу привязывать его к каким-либо точкам данных, а просто привязывать его к оси X, на основе которой я отправляю диаграмму. В моем конструкторе аннотаций я пытался установить anchorX.
double maxdate = chart.ChartAreas[0].AxisX.Maximum;
double mindate = chart.ChartAreas[0].AxisX.Minimum;
//use inputdata to find where relative spot is.
if(DateTime.TryParse(date, out ddate)) {
AnchorX = (ddate.ToOADate()) / (maxdate - mindate);
}
Я продолжал возвращать значения mins и max как NaN, что, как я выяснил, означает, что ChartArea будет управлять собой и устанавливать свои собственные max / mins. Все это было предварительно нарисовано.
Я пробовал post painting, но затем каждый раз, когда он рисовался, он добавлял аннотацию, затем снова выполнял postpaint и бесконечный цикл.
Ответ №1:
Я наконец нашел событие, которое позволяет мне это сделать. Событие Customize() решило эту проблему.
private void chart_Customize(object sender, EventArgs e) {
PaintAnnotations();
}
Теперь, непосредственно перед тем, как происходит рисование, данные, похоже, загружены, и к этому моменту уже установлены максимальные и минимальные значения, и я могу вернуть значения в коде сверху.
Надеюсь, это может спасти кому-то часы, которые я потерял!