如何在滚动时隐藏矩形注释

时间:2019-03-08 08:22:21

标签: c# charts

1-我有垂直线注释来显示今天的日期和矩形注释,同时滚动该行是因为他隐藏了它,但矩形却没有!

(我知道我必须使用RA.visible=false,但我需要一个事件和一个条件)

2-我想修复图表的显示在今天开始显示的位置时的视图,因为我必须移动滚动条才能得到它。

这是注释的代码:

  VerticalLineAnnotation LA = new VerticalLineAnnotation();
  DateTime today = DateTime.Now;
  ChartArea ca= GanttChart.ChartAreas[0];
  LA.AxisX = ca.AxisX;
  LA.AxisY = ca.AxisY;
  LA.Y = DateTime.ParseExact(today.ToShortDateString(), "dd/MM/yyyy", null).ToOADate();

  LA.X = LA.Y;
  LA.LineWidth = 1;
  LA.IsInfinitive = true;
  LA.LineColor = Color.Red;
  LA.ClipToChartArea = ca.Name;
  RectangleAnnotation RA = new RectangleAnnotation();
  RA.AxisX = ca.AxisX;
  RA.IsSizeAlwaysRelative = false;
  RA.ToolTip = "Aujourd'hui \nLe "+today.ToString("dd MMM yyyy");
  RA.Width = 20 * 0.07;         
  RA.Height = 8 * 0.01;        
  RA.LineColor = Color.Red;
  RA.BackColor = Color.Red;
  RA.AxisY = ca.AxisY;
  RA.Y = -RA.Height;
  RA.X = LA.X - RA.Width / 2;
  GanttChart.Annotations.Add(LA);

  GanttChart.Annotations.Add(RA);

enter image description here

编辑,滚动时出现问题,矩形仍在移动并且没有消失,可能是我需要知道图表区域的宽度吗?

更新 我尝试了这段代码,但矩形不再可见!

private void GanttChart_AxisViewChanged(object sender, ViewEventArgs e)
    {


        Axis ay = GanttChart.ChartAreas[0].AxisY;
        if (ay.Minimum == ay.ScaleView.Position)
        { RA.Visible = e.NewPosition == e.Axis.Minimum; }
        else
        { RA.Visible = e.NewPosition == e.Axis.Minimum; }
    }

1 个答案:

答案 0 :(得分:1)

滚动缩放的所有方面均由轴的ScaleView元素处理。

要在滚动过程中或滚动之后调整图表,可以使用AxisViewChangingAxisViewChanged事件。

要比较滚动状态和非滚动状态,您可以针对ScaleView.Positione.NewPosition测试axis.Minimume.Axis.Minimum

示例:

private void chart1_AxisViewChanged(object sender, ViewEventArgs e)
{
    if (e.NewPosition == e.Axis.Minimum)
    { action1 }  // unscrolled
    else
    { action2 }  // scrolled
}

根据您的情况,正文可以简化为:RA.Visible = e.NewPosition == e.Axis.Minimum;

注意:上面的示例未指定要观看的轴,即正在观察两个轴。例如,如果您只想观看 y轴,则应将其更改为:

private void chart1_AxisViewChanged(object sender, ViewEventArgs e)
{
    Axis ay = chart1.ChartAreas[0].AxisY;
    if (ay.Minimum == ay.ScaleView.Position) 
    { action1 }
    else
    { action2 }
}

在您的情况下(条形图类型逐渐滚动),您很可能只想观看 y轴