Since there seems to be no way to control the Legend Markers you may need to create a custom Legend. Here is an example of how it may look in the Form
and in a PDF
:
I had to zoom out the PDF, so it looks a little thinner/lighter.
Here is a function that returns a CustomLegend
:
Legend CustomCloneLegend(Chart chart, Legend oLeg)
{
Legend newL = new Legend();
newL.Position = oLeg.Position; // copy a few settings:
newL.Docking = oLeg.Docking;
newL.Alignment = oLeg.Alignment;
// a few numbers for the drawing to play with; you may want to use floats..
int iw = 32; int iw2 = iw / 2; int ih = 18; int ih2 = ih / 2;
int ir = 12; int ir2 = ir / 2; int lw = 3;
// we want to access the series' colors!
chart.ApplyPaletteColors();
foreach (Series S in chart.Series)
{
// the drawing code is only for linechart and markerstyles circle or square:
Bitmap bmp = new Bitmap(iw, ih);
using (Graphics G = Graphics.FromImage(bmp))
using (Pen pen = new Pen(S.Color, lw))
using (SolidBrush brush = new SolidBrush(S.Color))
{
G.DrawLine(pen, 0, ih2, iw, ih2);
if (S.MarkerStyle == MarkerStyle.Circle)
G.FillEllipse(brush, iw2 - ir2, ih2 - ir2, ir, ir);
else if (S.MarkerStyle == MarkerStyle.Square)
G.FillRectangle(brush, iw2 - ir2, ih2 - ir2, ir, ir);
}
// add a new NamesImage
NamedImage ni = new NamedImage(S.Name, bmp);
chart.Images.Add(ni);
// create and add the custom legend item
LegendItem lit = new LegendItem( S.Name, Color.Red, S.Name);
newL.CustomItems.Add(lit);
}
oLeg.Enabled = false;
return newL;
}
Here is how I call it:
Legend LC = CustomCloneLegend(chart3, L);
chart1.Legends.Add(LC);
A few notes:
- The code uses the
chart.ApplyPaletteColors()
. This is necessary to access the Series
color.
- It also makes use of the little know classes
NamedImage
and Chart.Images
. This is neccessary since setting any images in a Chart
requires a string!
- If you want to enlarge the image you may need to use
LegendCells
. For an example see here!
- I have coded the image drawing only for one
ChartType
(Line
) and only two MarkerStyles
.
- There are many ways to customize those
CustomItems
. See here for more info..
- I did use the
Series.MarkerSize
but it is easy to adapt the code by setting ir = S.MarkerSize;
etc inside the loop!
- You may need to copy a few more settings from your original legend to the custom legend than the 3 I did. I just noticed that you have set a
Font
..
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…