.NET图表控件 - 将栏标签放在外面和左边?

时间:2014-09-24 16:41:56

标签: c# .net mschart

我的问题非常简单,但我觉得答案更为复杂:

我试图设置此图表上的标签,使第一个日期位于栏的左侧,最后一个日期位于右侧:

chart

每个条实际上由一个代表整个时间跨度的点(绘制为带有白色内部颜色的边框)和一个代表完成百分比的点(绘制为这些边框中的实心填充)。

到目前为止,我完成的工作是使用Point CustomProperties完成的:

Chart1.Series[s].Points[0].Label = gsvPhaseList[0].EndDate.Value.ToString("M/dd");
Chart1.Series[s].Points[0].SetCustomProperty("BarLabelStyle", "Outside");

Chart1.Series[s].Points[1].Label = gsvPhaseList[0].StartDate.Value.ToString("M/dd");
Chart1.Series[s].Points[1].SetCustomProperty("BarLabelStyle", "Left");

我的问题是,似乎没有办法说出" Left&外&#34 ;.

我的下一步是在图表上为Paint事件添加一个钩子,这样我就可以实际获得标签的位置并向左移动(我希望),但我想确保没有&#39我先失踪了一些简单的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您的图表显示RangeBars。您可以通过在每个Point的左侧添加一个额外的DataPoint来伪造Outside-Left位置。

你需要让它足够宽以容纳标签,你应该把它保持在真实点的左边,所以标签不会碰到那边。

使其颜色= Color.Transparent,您的标签将向左和向右显示。

这是一段代码,用于为图表中的所有系列做装饰:

// just a few test data in Series S1 & S2..
S1.Points.AddXY(1, 13, 14.5);  // the dummy point
S1.Points.AddXY(1, 15,22);
S2.Points.AddXY(1, 7,8.5); // 2nd dummy
S2.Points.AddXY(1, 9,13);

// set the labels
foreach (Series S in chart1.Series)
    for (int i = 0; i < S.Points.Count; i+=2 )
    {
        DataPoint pt0 = S.Points[i];
        DataPoint pt1 = S.Points[i + 1];
        pt0.Color = Color.Transparent;
        pt0.SetCustomProperty("BarLabelStyle", "Right");
        pt0.Label = pt1.YValues[0] + " ";

        pt1.SetCustomProperty("BarLabelStyle", "Outside");
        pt1.Label = " " + pt1.YValues[1];
    }

您也可以编写代码来自动添加这些额外的标签点。

chart with labels