auto9817 Ответов: 0

Масштабирование аннотаций график в увеличении событие - точка продажи контролировать график


Это, вероятно, самый желанный вопрос, который я думаю, если вы используете элемент управления 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;
 }

0 Ответов