2010-09-24 26 views
2

J'ai une carte avec 8 séries - appelez-les S1 à S8. Ils sont dans l'ordre dans la liste des séries du graphique, et ils sont présentés en utilisant des éléments de légende personnalisés (Legend.CustomItems). Tout fonctionne bien, sauf qu'il semble y avoir un bug avec la façon dont les éléments sont affichés dans la légende lorsque la légende revient à une nouvelle ligne.Commandes Microsoft Chart Légende Commande d'articles

Je voudrais les éléments à afficher en lignes:

S1 S2 S3 S4 
S5 S6 S7 S8 

Malheureusement, il semble que lorsque la légende détecte qu'il va prendre deux lignes, il remplit verticalement avant horizontalement, comme suit:

S1 S3 S5 S7 
S2 S4 S6 S8 

Y a-t-il un moyen de placer les éléments correctement? Est-ce un bug avec les contrôles?

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

Pour être clair, la question est à la disposition des éléments de la légende, pas l'ordre. En fonction de la longueur des éléments de la légende, je finir avec cette mise en page:

S1 S3 S5 S7 S8 
S2 S4 S6 

Répondre

4

Vous pouvez les organiser en cas CustomizeLegend.

Ajoutez OnCustomizeLegend="Chart1_CustomizeLegend" au balisage de votre diagramme ou liez-le en code. Ensuite, créez gestionnaire:

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... 
} 

Ou vous pouvez créer une collection d'abord et le remplir en faisant référence à des éléments de légende existants pour votre choix, puis compensation LegendItems et l'insertion de tous les éléments à la fois. Je pense que vous pouvez l'écrire d'une manière, il sera valable pour tous les numéros d'article, mais je vous laisse le soin de le faire;).

Plus d'infos: http://msdn.microsoft.com/en-us/library/dd488245.aspx

(. Je sais que cette question est presque 2 ans, mais peut-être quelqu'un avec même problème (comme moi aujourd'hui) trouveront cela utile)

+0

Merci d'avoir pris le temps de répondre à une question si ancienne! Malheureusement, cela ne résout pas mon problème particulier, car le _order_ des éléments de la légende est correct, c'est la _layout_ qui est incorrecte. Cependant, je ne pense pas l'avoir précisé dans ma question. – Shawn

+0

Oui, mais c'est ainsi que le contrôle Chart affiche les éléments dans l'ordre que vous avez. Donc, pour les afficher correctement, vous devez changer l'ordre à ce que j'ai suggéré ci-dessus (ou même le modifier en ajoutant des éléments à la légende). Le problème est que l'utilisateur peut changer la taille du graphique et qu'il est possible que les éléments de légende soient dans une ligne et dans le mauvais ordre. Ou si des séries peuvent être ajoutées dynamiquement. Je ne sais pas s'il y a moyen de sortir de là alors ... – Episodex