由于滚动而出现长标签时,图表是轴标签的缩放区域

时间:2018-10-28 22:50:10

标签: c# .net winforms mschart

我有一些与每个数字关联的字符串标签。 我创建了一个Chart元素,其中一个ChartArea和一个Series使用SeriesChartType.Bar类型在x轴上显示我的标签(令人困惑的是使用Bar类型(但无论如何...)时的垂直轴,并在旁边显示一个数字。

由于我有很多标签无法同时显示在屏幕上,因此我在Zoom事件处理程序中使用Paint方法“启用”了滚动条,如下所示:

private void chart1_Paint(object sender, PaintEventArgs e)
{
    var scaleView = chart1.ChartAreas.First().AxisX.ScaleView;
    var pos = double.IsNaN(scaleView.Position) ? 0.0 : scaleView.Position;
    scaleView.Zoom(pos, pos + chart1.Height / 22.0);
}

我不知道这是否是正确的方法,但它(几乎)确实满足我的要求:

  • 如果屏幕上没有足够的数据点(标签),请显示滚动条
  • 调整窗口大小后正确更新可见区域

只有一件烦人的事情:如果由于滚动而使长标签出现在可见区域中或消失,则将标签占据的区域调整为最长可见标签。我希望这些屏幕截图可以解释我的意思:

在这里可以看到一个长标签(在底部): with long label visible

在这里,我向上滚动了一个单位,以使长标签不再可见: without long label

这在滚动过程中非常烦人,因为只要长标签出现或消失,所有内容都会重新缩放。

如何固定标签占用的区域以始终适合系列中最长的标签,无论当前是否可见?我在x轴和y轴上都尝试了IsLabelAutoFit = false,但这无济于事。

1 个答案:

答案 0 :(得分:0)

好的,我知道了。我用过

chartArea.InnerPlotPosition.Auto = false;
InnerPlotPosition.X = 33.333;

将图表区域的三分之一分配给标签,将其他三分之二分配给条形图。 InnerPlotPosition.Auto = false对此进行了修复,以使其在滚动时不会更新。