c# – 如何在Microsoft .net图表中将图例内容与左侧对齐?

我有不同长度的图例文本,需要将图例项目对齐到图例左侧以获得一致的布局.

|         My Legend         |

|     X what I have now     |

|  X what I have now long   |   -->  causes irregular layout

| X what I need             |

| X what I need long        |   --> nice, regular layout

必须是明显的东西,但已经看了几个小时,似乎没有更接近一个工作的例子.在此先感谢您的帮助!

编辑:

我正在尝试生成一个饼图,因此有多个系列,每个系列都需要系列符号和相应的系列数据点文本,就像默认图例布局中的情况一样.我的传奇创作方法:

public Legend CreateLegend()
{
    var legend = new Legend();

    legend.Enabled = true;
    legend.Font = new Font("Arial", 11F);
    legend.ForeColor = Color.FromArgb(102, 102, 102);
    legend.InsideChartArea = "Result Chart";

    legend.Position = new ElementPosition(50, 20, 50, height);

    legend.LegendStyle = LegendStyle.Column;

    return legend;
}

我的系列创作方法(目前将图例作为参数从我的实验/想法中获取解决方案):

public Series CreateSeries(List<ChartDivision> series, Legend legend)
{
    var seriesDetail = new Series();
    seriesDetail.Name = "Result Chart";
    seriesDetail.IsValueShownAsLabel = false;
    seriesDetail.ChartType = SeriesChartType.Pie;
    seriesDetail.BorderWidth = 2;

    foreach(var datapoint in series)
    {
        var p = seriesDetail.Points.Add(datapoint.Logged);
        p.LegendText = datapoint.Name;                
    }

    seriesDetail.ChartArea = "Result Chart";
    return seriesDetail;
}

最佳答案 说到System.Windows.Forms.DataVisualization.Charting.Chart这里.这实际上是默认行为.

但你可以覆盖它:
在设计器中选择图表,单击Legends-property.在相应的图例中,编辑CellColumns-Property.
这默认为空.您可以添加两列并将第一列设置为“ColumnType = SeriesSymbol”以获取自定义列的默认值.然后,在第二列上,对齐属性(默认情况下在MiddleCenter上)应该是您要查找的内容.

所以这是我的测试程序:http://pastebin.com/ZTwMhsXB
向表单添加图表控件和两个按钮并运行它.但是,我无法重现您的问题.

请注意,我做了更多的接线.你能否确认你在某处有这些线路:

chart1.Legends.Add(leg);
// and
legend.Name = // whatever
seriesDetail.Legend = legend.Name;

因为其他可能是您没有看到您创建的图例而是默认图例.如果您没有将图例添加到图表区域,则它是不可见的.

好的,我们现在正处于文本在其列中左对齐的位置,这些列总是在图例区域中居中.请参阅此SO线程以获得解决方案:How to control winform mschart legend text alignment c#?

像这样编辑代码:

legend.LegendStyle = LegendStyle.Column;
legend.CellColumns.Add(new LegendCellColumn() {
    ColumnType = LegendCellColumnType.SeriesSymbol,
    MinimumWidth = 250,
    MaximumWidth = 250
});
legend.CellColumns.Add(new LegendCellColumn()
{
    ColumnType = LegendCellColumnType.Text,
    Alignment = ContentAlignment.MiddleLeft,
    MinimumWidth = 1500,
    MaximumWidth = 1500
});

请注意,数字250和1500是字体大小的百分比,因此1500表示字体高度的15倍.
我已相应更新了pastebin(http://pastebin.com/GGCZGWF9),这是我的示例程序的截图:

点赞