我有不同长度的图例文本,需要将图例项目对齐到图例左侧以获得一致的布局.
| 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),这是我的示例程序的截图: