如何控制winform mschart图例文本对齐c#?

如何控制winform mschart图例文本对齐c#?,c#,text,alignment,mschart,legend,C#,Text,Alignment,Mschart,Legend,如何设置图表图例对象中文本的对齐方式?我试过使用: myChartName.Legends["mySeriesName"].Alignment = stringAlignment.Near 没有效果。我还尝试创建自定义图例项目,同样没有效果。文字在图例“框”中始终居中(与系列标记一起)。我唯一能够对齐的文本是标题,但我的应用程序中不需要标题 到目前为止,我的研究表明legend对象基本上是一个包含(默认情况下)两个单元格的表。如果是这样的话,应该有一种方法来访问这些单元格并将它们作为表格单

如何设置图表图例对象中文本的对齐方式?我试过使用:

 myChartName.Legends["mySeriesName"].Alignment = stringAlignment.Near 
没有效果。我还尝试创建自定义图例项目,同样没有效果。文字在图例“框”中始终居中(与系列标记一起)。我唯一能够对齐的文本是标题,但我的应用程序中不需要标题


到目前为止,我的研究表明legend对象基本上是一个包含(默认情况下)两个单元格的表。如果是这样的话,应该有一种方法来访问这些单元格并将它们作为表格单元格进行操作。那么,有什么好处呢?为什么我不能访问图例对象的文本对齐属性?很明显,我缺少了一些东西,但就我的一生而言,我似乎无法理解这一点。非常令人沮丧。

我的理解是,
图例
对齐与
停靠
属性相关,而不是图例中文本的对齐方式。因此,将
对齐
设置为接近意味着将图例框定位在
停靠
方向附近

这很难用文字来解释。有一个名为
图表功能->图例->样式和自动定位的小节
,它将帮助您使用这两个属性并了解它们的工作原理

对于内部图例对齐,您可能需要使用
legend.CustomItems
并分别定义
LegendCell

chart.Legends["Default"].CustomItems.Clear();
chart.Legends["Default"].CustomItems.Add(new LegendItem("LegendItem", Color.Red, ""));
chart.Legends["Default"].CustomItems[0].Cells.Add(new LegendCell(LegendCellType.Text, "My text", ContentAlignment.MiddleLeft));

这在示例的
图表功能->图例->图例单元格
部分中进行了描述。

在继续尝试解决这一问题时,我无意中发现了以下MSDN库页面中的一些信息:

注意:您不能调整图表中的单个图例项和单元格。图例集合。要调整它们,请使用自定义图例项

那么,回到CustomItem路线。我从几个来源(包括你,多米尼克,谢谢)收集了这段代码:

从我所能找到的来看,它应该是有效的,但事实并非如此。它将生成一个具有两个单元格的图例对象;第一个为空,第二个为左对齐文本。我试着贴一张照片,但系统说我还不配

为什么系列符号没有线条也是一个谜,但这是另一个需要解决的问题。目前我主要关心的是文本的合理性问题。看起来单元格内的文本按需要左对齐,但单元格本身在图例对象中居中;不是我想要的。我希望这些单元格也在对象中左对齐,因此第一个单元格紧靠图例对象的左边缘


想法?

问题解决了。CustomItem方法也不起作用,所以我尝试使用LegendCellColumn类

我将LegendStyle从一列改为一行,然后添加了两个CellColumns,一个用于序列符号,一个用于图例文本。设置对齐方式、边距和列宽(结果证明这是诀窍),然后瞧;一个我想要的传奇。这是任何有类似问题的人的代码

chartSel.Legends[ySeries.Name].CellColumns.Add(new LegendCellColumn("", LegendCellColumnType.SeriesSymbol, ""));
chartSel.Legends[ySeries.Name].CellColumns[0].Alignment = ContentAlignment.TopLeft;
chartSel.Legends[ySeries.Name].CellColumns[0].Margins = new System.Windows.Forms.DataVisualization.Charting.Margins(0, 0, 1, 1);
chartSel.Legends[ySeries.Name].CellColumns[0].MinimumWidth = 250;
chartSel.Legends[ySeries.Name].CellColumns[0].MaximumWidth = 250;

chartSel.Legends[ySeries.Name].CellColumns.Add(new LegendCellColumn("", LegendCellColumnType.Text, ySeries.Name));
chartSel.Legends[ySeries.Name].CellColumns[1].Alignment = ContentAlignment.MiddleLeft;
chartSel.Legends[ySeries.Name].CellColumns[1].Margins = new System.Windows.Forms.DataVisualization.Charting.Margins(0, 0, 1, 1);
chartSel.Legends[ySeries.Name].CellColumns[1].MinimumWidth = 1500;
chartSel.Legends[ySeries.Name].CellColumns[1].MaximumWidth = 1500;
这可能不是最有效的方法,但它确实有效。从技术上讲,图例符号和文本仍然在对象中居中,但由于我强制调整了两列的宽度,因此它看起来是左对齐的


希望这能帮助像我这样的新手避免几天的恐慌。

谢谢你的回复。在图表上定位图例对象不是问题。问题在于将文本定位在图例对象中。默认情况下,图例文本在图例对象中居中显示。我希望能够左对齐文本。这似乎是我无法理解的。chartSel.Legends.Add(ySeries.Name);
chartSel.Legends[ySeries.Name].CellColumns.Add(new LegendCellColumn("", LegendCellColumnType.SeriesSymbol, ""));
chartSel.Legends[ySeries.Name].CellColumns[0].Alignment = ContentAlignment.TopLeft;
chartSel.Legends[ySeries.Name].CellColumns[0].Margins = new System.Windows.Forms.DataVisualization.Charting.Margins(0, 0, 1, 1);
chartSel.Legends[ySeries.Name].CellColumns[0].MinimumWidth = 250;
chartSel.Legends[ySeries.Name].CellColumns[0].MaximumWidth = 250;

chartSel.Legends[ySeries.Name].CellColumns.Add(new LegendCellColumn("", LegendCellColumnType.Text, ySeries.Name));
chartSel.Legends[ySeries.Name].CellColumns[1].Alignment = ContentAlignment.MiddleLeft;
chartSel.Legends[ySeries.Name].CellColumns[1].Margins = new System.Windows.Forms.DataVisualization.Charting.Margins(0, 0, 1, 1);
chartSel.Legends[ySeries.Name].CellColumns[1].MinimumWidth = 1500;
chartSel.Legends[ySeries.Name].CellColumns[1].MaximumWidth = 1500;