Масштабирование аннотаций график в увеличении событие - точка продажи контролировать график
Это, вероятно, самый желанный вопрос, который я думаю, если вы используете элемент управления Dot Net Chart. Я искал на многих сайтах вопросов и ответов,но до сих пор не нашел ответа.
У меня есть около 6-7 областей диаграммы, расположенных в одном графике.
Я разрешил использовать горизонтальную шкалу (то есть масштабирование по оси X) моей диаграммы.
Я могу динамически добавлять аннотации линий и прямоугольников во время выполнения.
Каков надежный способ масштабирования аннотации диаграммы при тригерировании события масштабирования ?
Я исправил внутреннее расположение моей области диаграммы, как это для всей моей диаграммы, чтобы избежать любого изменения ширины внутренней области графика, как это.
chartArea1.InnerPlotPosition.Auto = false; chartArea1.InnerPlotPosition.X = 10; chartArea1.InnerPlotPosition.Y = 2; chartArea1.InnerPlotPosition.Height = 55; chartArea1.InnerPlotPosition.Width = 90;
Я использую приведенный ниже код для масштабирования всех моих аннотаций на диаграмме.
Следовательно, ширина внутренней площади участка должна быть фиксированной. Масштабирование не должно иметь проблемы.
Однако на практике, когда я пытался увеличить масштаб, нарисованная аннотация масштабируется, но с некоторым несоответствием. Иногда он немного меньше, а иногда немного больше.
Вы можете проверить это поведение на прилагаемом скриншоте (пожалуйста, дайте мне знать, если вы не видите скриншот).
На скриншоте я нарисовал прямоугольную аннотацию во время выполнения.
Когда он увеличен, ширина аннотации прямоугольника постоянно меняется.
https://freeimage.host/i/2AeUhu
https://ibb.co/2St6W4b
Насколько я понимаю, в области диаграммы нет динамически изменяющейся части, так как я зафиксировал внутреннюю область диаграммы.
Что может вызвать такое нестабильное поведение и как я могу это исправить ?
Ваша помощь будет очень признательна.
Что я уже пробовал:
private double lastScaleViewSize = Double.NaN; private void chart1_AxisViewChanged(object sender, ViewEventArgs e) { sel_ChartAreaName = e.ChartArea.Name; if (Double.IsNaN(lastScaleViewSize) || lastScaleViewSize <= 0) { lastScaleViewSize = chart1.Series[2].Points.Count; } foreach (var annotation in chart1.Annotations) { if (double.IsNaN(chart1.ChartAreas[sel_ChartAreaName].AxisX.ScaleView.Size)) { annotation.Width = (annotation.Width * lastScaleViewSize) / chart1.Series[2].Points.Count; } else { annotation.Width = (annotation.Width * lastScaleViewSize) / chart1.ChartAreas[sel_ChartAreaName].AxisX.ScaleView.Size; } } lastScaleViewSize = chart1.ChartAreas[sel_ChartAreaName].AxisX.ScaleView.Size; }