2

我有一个包含 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
4

1 回答 1

4

CustomizeLegend您可以在活动中安排它们。

添加OnCustomizeLegend="Chart1_CustomizeLegend"到您的图表标记或将其绑定在后面的代码中。然后创建处理程序:

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 年的历史了,但也许有同样问题的人(比如今天的我)会觉得这很有帮助。)

于 2012-04-27T10:08:14.830 回答