Microsoft Chart Controls управляет порядком элементов легенды

У меня есть диаграмма с 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);
    }
}

ИЗМЕНИТЬ

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

S1 S3 S5 S7 S8
S2 S4 S6

person Shawn    schedule 24.09.2010    source источник


Ответы (1)


Вы можете расположить их в 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 года, но, возможно, кто-то с такой же проблемой (как я сегодня) найдет это полезным.)

person Episodex    schedule 27.04.2012
comment
Спасибо, что нашли время ответить на такой старый вопрос! К сожалению, это не решает мою конкретную проблему, поскольку порядок элементов в легенде правильный, а макет неверен. Однако я не думаю, что ясно дал понять это в своем вопросе. - person Shawn; 31.05.2012
comment
Да, но именно так элемент управления диаграммами отображает элементы в том порядке, в котором они у вас есть. Поэтому, чтобы отобразить их правильно, вам нужно изменить порядок на тот, который я предложил выше (или даже изменить его при добавлении элементов в легенду). Проблема в том, что если пользователь может изменить размер диаграммы, возможно, что элементы легенды будут расположены в одной строке и в неправильном порядке. Или если серии могут быть добавлены динамически. Я не знаю, есть ли легкий выход из этого тогда... - person Episodex; 01.06.2012