ZedGraph垂直线与LineObj问题

我有一个ZedGraphControl,里面有几条曲线,我想在一些固定的x位置添加垂直线。 这些线当然应该只在实际的图形区域内。

我试过跟随

LineObj line = new LineObj(Color.Black, xPos, myPane.YAxis.Scale.Min, xPos, myPane.YAxis.Scale.Max); line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; line.Line.Width = 1f; myPane.GraphObjList.Add(line); 

这个工作正常,直到用户缩放图形,然后垂直线将伸出实际图形区域(参见下面的图片链接,同时注意它没有在图形内部虚线,奇数)。

http://sofzh.miximages.com/c%23//

有没有办法解决这个问题(如果只有一种方法可以获得当前缩放的myPane.Xaxis.Scale.Min和Max,然后更新ZoomEvent中的图形?)或者是否有更好的类/方法可以使用其他比LineObj为此目的?

而不是定义LineObj ,定义一个LineItem并将其添加到GraphPane.CurveList

 LineItem line = new LineItem(String.Empty, new[] { xPos, xPos }, new[] { myPane.YAxis.Scale.Min, myPane.YAxis.Scale.Max }, Color.Black, SymbolType.None); line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; line.Line.Width = 1f; myPane.CurveList.Add(line); 

这会将line绑定到图形窗格中的坐标系,这样当您缩放或平移line位置仍将限制在图形中。 当然,如果在不更新liney值的情况下缩小,则line末端将位于图形内。

我从个人经验中知道,在Zedgraph中,潇洒可能是一个问题; 但是,添加LineItem时似乎正好显示了破折号。

你是使用LineObj而不是CurveItem的好方法。

查看Location结构和CoordinateFrame属性。 它允许对X和/或Y使用不同的坐标系。

CoordinateFrame设置为XScaleYChartFraction允许使用0d和1d作为Y,这意味着图形窗格的“底部”和“顶部”(而不是YAxis.Scale.Min和YAxis.Scale.Max),因为X继续使用X轴刻度坐标系。

这意味着你可以使用.AxisChange(),zoom,pan和LineObj不会干扰Y轴的比例变化!

 var line = new LineObj(Color.Black, xPos, 0, xPos, 1); line.Location.CoordinateFrame = XScaleYChartFraction; // This do the trick ! line.IsClippedToChartRect = true; line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; line.Line.Width = 1f; myPane.GraphObjList.Add(line);