C# 如何更改图表图例的属性

C# 如何更改图表图例的属性,c#,visual-studio,charts,properties,legend,C#,Visual Studio,Charts,Properties,Legend,我很难在VS2017中调整我的C图表图例的布局。当我转到“属性”中的图例时,我可以更改几个属性,但我找不到如何更改图例边框与其项目之间的边距,因此,实际上是填充。另一个我无法更改的属性:图例项之间的间距。我发现了一些关于样式文件的讨论,但我希望避免这种情况。我也搜索了不同的参考资料,可以给我更多的选择,但我没有找到任何东西 那么,除了在“属性”中显示的图例外,还有其他方法可以更改图例的属性吗?我希望找到类似这样的内容:myLegend.padding=10pt。您可以使用图表中的事件来设置图例、

我很难在VS2017中调整我的C图表图例的布局。当我转到“属性”中的图例时,我可以更改几个属性,但我找不到如何更改图例边框与其项目之间的边距,因此,实际上是填充。另一个我无法更改的属性:图例项之间的间距。我发现了一些关于样式文件的讨论,但我希望避免这种情况。我也搜索了不同的参考资料,可以给我更多的选择,但我没有找到任何东西

那么,除了在“属性”中显示的图例外,还有其他方法可以更改图例的属性吗?我希望找到类似这样的内容:myLegend.padding=10pt。

您可以使用图表中的事件来设置图例、图例项及其图例单元格的样式

您要查找的是的属性

表示顶部、底部、左侧和右侧的边距对象 图例单元格边距的值。“顶部”、“底部”的默认值, 左侧和右侧分别为0,0,15,15

边距以图例字体大小的百分比表示 细胞

这意味着对于由两个单元格组成的普通LegendItem,一个用于序列标记,一个用于文本,需要设置两个边距

这是一个例子;它创建了30%的上边距,没有下边距,也为第一个标记单元格创建了400%的左边距,为第二个右文本单元格创建了200%的右边距。单元格之间的填充将添加到文本单元格中,并为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);
    }
}
让我们看看它的实际行动;我为单元格添加了两种颜色,这样您可以更好地看到各个区域:

以下是更新的动态代码:

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);
可以使用图表的事件设置图例、图例的LegendItems及其LegendCell的样式

您要查找的是的属性

表示顶部、底部、左侧和右侧的边距对象 图例单元格边距的值。“顶部”、“底部”的默认值, 左侧和右侧分别为0,0,15,15

边距以图例字体大小的百分比表示 细胞

这意味着对于由两个单元格组成的普通LegendItem,一个用于序列标记,一个用于文本,需要设置两个边距

这是一个例子;它创建了30%的上边距,没有下边距,也为第一个标记单元格创建了400%的左边距,为第二个右文本单元格创建了200%的右边距。单元格之间的填充将添加到文本单元格中,并为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);
    }
}
让我们看看它的实际行动;我为单元格添加了两种颜色,这样您可以更好地看到各个区域:

以下是更新的动态代码:

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);

这是WPF项目还是WinForms?ASP.net?您使用的是什么图表软件包?它是一个WinForms应用程序,使用.NET Framework 4。目前我没有使用任何特定的图表软件包,因为我找到的唯一一个是System.Windows.Forms.DataVisualization.charting,它什么都没有做。这是WPF项目还是WinForms?ASP.net?您使用的是什么图表软件包?它是一个WinForms应用程序,使用.NET Framework 4。目前,我没有使用任何特定的图表软件包,因为我找到的唯一一个是System.Windows.Forms.DataVisualization.charting,它什么都没有做。我如何称呼此事件?我是这样尝试的:chart1.customizedElegend+=new System.xxx.Charting.customizedElegendEventArgsChart1\u customizedLegendLegendObject发送者,customizedElegendEventArgs e,但我得到的消息是:无法从MethodGroup转换为LegendItemsCollection。您一如既往地将其连接起来,最好在事件窗格中双击它!您不调用它,而是通过调用Invalidate来触发它。除非你像我的上一个例子那样做动态的东西,否则你根本不需要调用它,因为每当绘制图例时,它都会被自动调用。我如何调用这个事件?我是这样尝试的:chart1.customizedElegend+=new System.xxx.Charting.customizedElegendEventArgsChart1\u customizedLegendLegendObject发送者,customizedElegendEventArgs e,但我得到的消息是:无法从MethodGroup转换为LegendItemsCollection。您一如既往地将其连接起来,最好在事件窗格中双击它!您不调用它,而是通过调用Invalidate来触发它。除非你像我的上一个例子那样做动态的东西,否则你根本不需要调用它,因为每当绘制图例时,它都会被自动调用。。