我的设置是这样的:我在图表控件中有多个窗格(16),每个窗格都必须有自己的X轴,因为每个窗格可以有不同的条带,条带似乎链接到轴本身,而不是窗格或系列(奇怪)。
这就是它的样子:http://i.imgur.com/oVEZ0Ol.png。您可以看到表示每个通道的丢弃数据包的条带,根据定义它们在不同的通道中是不同的。
现在我的问题是我还需要支持缩放和平移(已完成),但我的X轴必须在所有窗格中保持同步。基本上,如果我放大某个时间点,每个窗格都必须放大。
如何在不共享X轴的情况下实现这一目标?或者如何在共享X轴的同时实现每个窗格条?无论哪种方式都可以解决我的问题。
答案 0 :(得分:1)
您可以使用ChartControl.AxisVisualRangeChanged
事件更新每个轴的缩放。只需为每个轴VisualRange.Auto = false
和VisualRange.AutoSideMargins = false
设置
以下是SwiftPlotDiagram
的示例:
private void chartControl1_AxisVisualRangeChanged(object sender, AxisRangeChangedEventArgs e)
{
var axisX = e.Axis as SwiftPlotDiagramAxisXBase;
if (axisX == null)
return;
var diagram = (SwiftPlotDiagram)chartControl1.Diagram;
UpdateVisualRange(axisX, diagram.AxisX);
foreach (SwiftPlotDiagramAxisXBase secondaryAxisX in diagram.SecondaryAxesX)
UpdateVisualRange(axisX, secondaryAxisX);
}
private void UpdateVisualRange(SwiftPlotDiagramAxisXBase axisFrom, SwiftPlotDiagramAxisXBase axisTo)
{
if (axisTo != axisFrom)
{
var rangeFrom = axisFrom.VisualRange;
var rangeTo = axisTo.VisualRange;
if (!rangeTo.MinValue.Equals(rangeFrom.MinValue) || !rangeTo.MaxValue.Equals(rangeFrom.MaxValue))
rangeTo.SetMinMaxValues(rangeFrom.MinValue, rangeFrom.MaxValue);
}
}
答案 1 :(得分:0)
正确的方法是对所有窗格使用相同的X轴。 因此,您甚至不需要处理AxisVisualRangeChanged事件,因为所有操作都是自动完成的。