У меня есть несколько строковых меток, каждый из которых связан с номером.Я создал элемент 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);
}
Я не знаю, является ли это правильным способом сделать это, но он делает (почти) то, что я хочу:
- показать полосу прокрутки, если на экране слишком много точек данных (меток), чтобы уместиться
- правильно обновить видимую область при изменении размера окна
Есть только одна неприятная вещь: если из-за прокрутки длинная метка появляется в видимой области или исчезает, область, занятая метками, корректируется до самой длинной видимой метки.Я надеюсь, что эти скриншоты объясняют, что я имею в виду:
Здесь видна одна длинная метка (внизу):
Здесь я прокрутил на одну единицу так,что длинная метка больше не видна:
Это очень раздражает во время прокрутки, так как все изменяется при каждом появлении или исчезновении длинной метки.
Какисправить область, занимаемую метками, чтобы она всегда соответствовала самой длинной метке в серии, независимо от того, видна она в настоящее время или нет?Я пробовал IsLabelAutoFit = false
для обеих осей X и Y, но это не помогает.