Microsoft Chart Controls Легендарный порядок элементов - PullRequest
2 голосов
/ 24 сентября 2010

У меня есть график с 8 сериями - назовите их от S1 до S8. Они расположены по порядку в списке серий на диаграмме и представлены с использованием пользовательских элементов легенды (Legend.CustomItems). Все работает нормально, за исключением того, что кажется, что есть ошибка в том, как элементы отображаются в легенде, когда легенда переносится на новую строку.

Я бы хотел, чтобы элементы отображались в строках:

S1 S2 S3 S4
S5 S6 S7 S8

К сожалению, кажется, что когда легенда обнаруживает, что она займет два ряда, она заполняется вертикально, а не горизонтально, например:

S1 S3 S5 S7
S2 S4 S6 S8

Есть ли способ правильно расположить предметы? Это ошибка с элементами управления?

var chart = new Chart();
// More chart setup
foreach(var s in chart.Series)
{
    if (simpleLegend) chart.Legends[0].CustomItems.Add(s.Color, s.LegendText);
    else
    {
        var legendItem = new LegendItem();
        // Legend item customization
        chart.Legends[0].CustomItems.Add(legendItem);
    }
}

EDIT

Чтобы было ясно, проблема в макете элементов легенды, а не в порядке. В зависимости от длины элементов легенды у меня может получиться такой макет:

S1 S3 S5 S7 S8
S2 S4 S6

1 Ответ

4 голосов
/ 27 апреля 2012

Вы можете организовать их в CustomizeLegend событие.

Добавьте OnCustomizeLegend="Chart1_CustomizeLegend" к вашей разметке Chart или привяжите ее в коде. Затем создайте обработчик:

protected void Chart1_CustomizeLegend(object sender, CustomizeLegendEventArgs e)
{
    //change order of legend items
    var items = e.LegendItems;
    var item = items[1]; //s2
    items.RemoveAt(1);
    items.Insert(2, item);
    item = items[1]; //after removing s2, s3 is now here
    items.RemoveAt(1);
    items.Insert(4, item);
    //etc...
}

Или вы можете сначала создать коллекцию и заполнить ее, ссылаясь на существующие элементы легенды в нужном порядке, затем очистив LegendItems и вставив все элементы сразу. Я думаю, что вы можете написать его так, чтобы он действовал для всех номеров, но я оставляю это вам;).

Подробнее: http://msdn.microsoft.com/en-us/library/dd488245.aspx

(я знаю, что этому вопросу уже почти 2 года, но, возможно, кому-то с такой же проблемой (как я сегодня) это будет полезно).

...