2

S1 から S8 までの 8 つのシリーズのチャートがあります。それらはチャートのシリーズのリストに順番に並べられており、カスタムの凡例アイテム (Legend.CustomItems) を使用して表示されます。凡例が新しい行に折り返されるときに項目が凡例に表示される方法にバグがあるように見えることを除いて、すべて正常に動作します。

アイテムを行に表示したい:

S1 S2 S3 S4
S5 S6 S7 S8

残念ながら、凡例が 2 行になることを検出すると、次のように、水平方向の前に垂直方向に塗りつぶされます。

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

Chart マークアップに追加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 に答える