在Devexpress XtraCharts控件中保持不同的辅助轴链接

时间:2014-08-28 19:21:38

标签: winforms charts devexpress xtrachart

我的设置是这样的:我在图表控件中有多个窗格(16),每个窗格都必须有自己的X轴,因为每个窗格可以有不同的条带,条带似乎链接到轴本身,而不是窗格或系列(奇怪)。

这就是它的样子:http://i.imgur.com/oVEZ0Ol.png。您可以看到表示每个通道的丢弃数据包的条带,根据定义它们在不同的通道中是不同的。

现在我的问题是我还需要支持缩放和平移(已完成),但我的X轴必须在所有窗格中保持同步。基本上,如果我放大某个时间点,每个窗格都必须放大。

如何在不共享X轴的情况下实现这一目标?或者如何在共享X轴的同时实现每个窗格条?无论哪种方式都可以解决我的问题。

2 个答案:

答案 0 :(得分:1)

您可以使用ChartControl.AxisVisualRangeChanged事件更新每个轴的缩放。只需为每个轴VisualRange.Auto = falseVisualRange.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事件,因为所有操作都是自动完成的。