Диаграмма - это область масштабирования для меток осей, когда из-за прокрутки появляются длинные метки - PullRequest
0 голосов
/ 29 октября 2018

У меня есть несколько строковых меток, каждый из которых связан с номером.Я создал элемент Chart с одним ChartArea и одним Series, который использует тип SeriesChartType.Bar для отображения моих меток на оси x (которая, как ни странно, является вертикальной осью при использовании * 1005).* введите, но в любом случае ...) и покажите число в виде строки рядом с ним.

Поскольку у меня много меток, которые не помещаются на экране сразу, я "включил" полосу прокрутки, используяZoom метод в моем Paint обработчике событий, подобный этому:

private void chart1_Paint(object sender, PaintEventArgs e)
{
    var scaleView = chart1.ChartAreas.First().AxisX.ScaleView;
    var pos = double.IsNaN(scaleView.Position) ? 0.0 : scaleView.Position;
    scaleView.Zoom(pos, pos + chart1.Height / 22.0);
}

Я не знаю, является ли это правильным способом сделать это, но он делает (почти) то, что я хочу:

  • показать полосу прокрутки, если на экране слишком много точек данных (меток), чтобы уместиться
  • правильно обновить видимую область при изменении размера окна

Есть только одна неприятная вещь: если из-за прокрутки длинная метка появляется в видимой области или исчезает, область, занятая метками, корректируется до самой длинной видимой метки.Я надеюсь, что эти скриншоты объясняют, что я имею в виду:

Здесь видна одна длинная метка (внизу): with long label visible

Здесь я прокрутил на одну единицу так,что длинная метка больше не видна: without long label

Это очень раздражает во время прокрутки, так как все изменяется при каждом появлении или исчезновении длинной метки.

Какисправить область, занимаемую метками, чтобы она всегда соответствовала самой длинной метке в серии, независимо от того, видна она в настоящее время или нет?Я пробовал IsLabelAutoFit = false для обеих осей X и Y, но это не помогает.

1 Ответ

0 голосов
/ 29 октября 2018

Хорошо, я понял.Я использовал

chartArea.InnerPlotPosition.Auto = false;
InnerPlotPosition.X = 33.333;

, чтобы дать одну треть площади графика меткам, а две трети - столбцам.InnerPlotPosition.Auto = false делает это исправленным, чтобы оно не обновлялось при прокрутке.

...