Ось автомасштабирования после панорамирования или масштабирования диаграммы Visiblox

У меня есть линейная диаграмма Visiblox, которая позволяет масштабировать и перемещать по оси X (но не по оси Y). После масштабирования или панорамирования определенной области диаграммы я хотел бы, чтобы диапазон YAxis и тики были пересчитаны только на основе видимых данных. Я попытался установить AutoScaleToVisibleData="True" для YAxis, но это не работает, поскольку масштабирование и панорамирование не устанавливают XAxis.Range, а XAxis.Range должен измениться, чтобы свойство AutoScaleToVisibleData YAxis имело эффект.

ИЗМЕНИТЬ

Сейчас я пытаюсь использовать функцию IAxis.AdoptZoomAsRange(), но не могу понять ее. Соответствующий пример кода ниже:

XAML:

<charts:Chart Name="chart">
    <charts:Chart.Behaviour>
        <charts:BehaviourManager AllowMultipleEnabled="True">
            <charts:PanBehaviour IsEnabled="True" YPanEnabled="False" PanEnded="PanBehaviour_PanEnded" />
            <charts:ZoomBehaviour IsEnabled="True" YZoomEnabled="False" AnimationEnabled="False" ZoomMode="MouseWheel" ZoomEnded="ZoomBehaviour_ZoomEnded" />
        </charts:BehaviourManager>
    </charts:Chart.Behaviour>
    <charts:Chart.XAxis>
        <charts:DateTimeAxis />
    </charts:Chart.XAxis>
    <charts:Chart.YAxis>
        <charts:LinearAxis AutoScaleToVisibleData="True" />
    </charts:Chart.YAxis>
</charts:Chart>

Код программной части:

public MainWindow()
{
    InitializeComponent();

    DataSeries<DateTime, double> dataSeries = new DataSeries<DateTime, double>();
    for (int i = 0; i < 100; i++)
        dataSeries.Add(new DataPoint<DateTime, double>(DateTime.Now.AddMonths(i), i));

    LineSeries lineSeries = new LineSeries();
    lineSeries.DataSeries = dataSeries;
    chart.Series.Add(lineSeries);
}

private void PanBehaviour_PanEnded(object sender, EventArgs e)
{
    chart.YAxis.AdoptZoomAsRange();
}

private void ZoomBehaviour_ZoomEnded(object sender, EventArgs e)
{
    chart.YAxis.AdoptZoomAsRange();
}

person Abiel    schedule 27.07.2011    source источник


Ответы (1)


Метод AdoptZoomAsRange в IAxis, вероятно, то, что вы ищете — есть загружаемый пример, который используется в этом запись в блоге, которая, надеюсь, прояснит ситуацию.

[раскрытие информации: я работаю над Visiblox]

person Partha Lal    schedule 01.08.2011
comment
Это похоже на то, что я не могу понять, как заставить его работать. Я отредактировал свой исходный пост, чтобы показать пример. Я пытаюсь выполнить метод после любого масштабирования или панорамирования, а AutoScaleToVisibleData имеет значение True на оси Y, но ничего не происходит с осью Y после панорамирования или масштабирования. - person Abiel; 01.08.2011
comment
Вам нужно AdoptZoomAsRange на оси X, а не на оси Y. AutoScaleToVisibleData на оси Y означает, что он будет вычислять свой диапазон на основе того, что видно в диапазоне XAxis, поэтому вам нужно каждый раз сбрасывать этот диапазон. [отказ от ответственности: я работаю в Visiblox] - person wjbeau; 10.08.2011
comment
Вместо этого сработало применение AdoptZoomAsRange к XAxis; однако теперь диаграмма не будет уменьшаться с помощью колесика мыши. AdoptZoomAsRange вызывается как в PanBehavior_PanEnded, так и в ZoomBehavior_ZoomEnded. Если я удалю его в ZoomBehavior_ZoomEnded, то смогу уменьшить масштаб, но только частично, если диаграмма уже была увеличена достаточно сильно. - person Abiel; 08.10.2011