2017-07-11 20 views
1

Ich habe Schwierigkeiten, das Layout der Legende meines C# -Charts in VS2017 zu optimieren. Wenn ich zu Legends in Properties gehe, kann ich einige Eigenschaften ändern, aber ich kann nicht finden, wie man den Rand zwischen dem Rand der Legende und seinen Einzelteilen ändert (also die Polsterung wirklich). Eine weitere Eigenschaft, die ich nicht ändern kann: Abstand zwischen den Legendenelementen. Ich habe einige Diskussionen über "Stildateien" gefunden, aber ich möchte das vermeiden. Ich suchte auch nach anderen Referenzen, die mir mehr Möglichkeiten bieten könnten, aber ich habe nichts gefunden.So ändern Sie die Eigenschaften der Diagrammlegende

Gibt es also eine Möglichkeit, die Eigenschaften einer Legende zu ändern, außer denen, die in Properties angezeigt werden? Ich hoffe etwas zu finden wie: "myLegend.padding = 10pt".

+0

Ist das ein WPF-Projekt, oder WinForms? ASP.net? Welches Charting-Paket verwendest du? –

+0

Es ist eine WinForms-Anwendung, die .NET Framework 4 verwendet. Im Moment verwende ich kein spezielles Diagrammpaket, da das einzige, das ich finde, "System.Windows.Forms.DataVisualization (.Charting)" ist und nichts tut . – 10a

Antwort

1

Sie können das CustomizeLegend Ereignis des Diagramms verwenden, um die Legend, die LegendItems und ihre LegendCells zu stylen.

Die Margin Sie suchen, ist eine Eigenschaft des Objekts LegendCell

A Ränder, die die oben, unten steht, nach links und rechts Werte der Legende Zellenränder. Die Standardwerte für oben, unten, links und rechts sind "0,0,15,15".

Margins als Prozentsatz der Schriftgröße für die Legende Zelle

Dies bedeutet, gemessen wird, dass für ein normales LegendItem, die Cells von zwei besteht, eine für die Serie Marker und eine für die Text, müssen Sie zwei Ränder festlegen.

Hier ist ein Beispiel; es erzeugt einen oberen Rand von 30%, keine unteren Ränder, auch für die erste, die linke Markerzelle einen 400% (linken) Rand, für die zweite (rechts) Textzelle einen 200% rechten Rand. Eine Auffüllung zwischen den Zellen wird der Textzelle hinzugefügt und ist 100% ..:

private void chart1_CustomizeLegend(object sender, CustomizeLegendEventArgs e) 
{ 
    foreach (LegendItem lit in e.LegendItems) 
    { 
     var cells = lit.Cells; 
     cells[0].Margins = new Margins(30, 0, 400, 100); 
     cells[1].Margins = new Margins(30, 0, 0, 200); 
    } 
} 

Sehen wir es in Aktion; Ich habe zwei Farben zu den Zellen gegeben, so dass Sie die jeweiligen Bereiche besser sehen können:

enter image description here

Hier ist die aktualisierte, dynamische Code:

cells[0].Margins = new Margins(tr_top.Value, tr_bot.Value, tr_ll.Value, tr_mm.Value); 
cells[1].Margins = new Margins(tr_top.Value, tr_bot.Value, tr_mm.Value, tr_rr.Value); 
+0

Wie rufe ich dieses Ereignis an? Ich habe es so ausprobiert: 'chart1.CustomLegend + = new System.xxx.Charting.CustomiseLegendEventArgs (chart1_CustomizedLegend)' und 'void chart_CustomizedLegend (Objekt Absender, CustomizeLegendEventArgs e)' aber dann bekomme ich die Nachricht: _cann nicht konvertieren von MethodGroup zu LegendItemsCollection_. – 10a

+0

Sie schließen es wie immer an, am besten durch Doppelklick im Ereignisfenster! Und Sie rufen es nicht auf, sondern lösen es aus, indem Sie Invalidate() aufrufen.Sofern Sie nicht dynamisches Zeug wie mein letztes Beispiel verwenden, müssen Sie es nicht aufrufen, da es automatisch aufgerufen wird, wenn die Legende gezeichnet wird. – TaW

Verwandte Themen