我的问题非常简单,但我觉得答案更为复杂:
我试图设置此图表上的标签,使第一个日期位于栏的左侧,最后一个日期位于右侧:
每个条实际上由一个代表整个时间跨度的点(绘制为带有白色内部颜色的边框)和一个代表完成百分比的点(绘制为这些边框中的实心填充)。
到目前为止,我完成的工作是使用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我先失踪了一些简单的东西。有什么想法吗?
答案 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];
}
您也可以编写代码来自动添加这些额外的标签点。