Увеличение в MS Forms Chart работает не так, как ожидалось ... или Как позиционировать график? - PullRequest
2 голосов
/ 12 сентября 2011

У меня есть DataVisualization.Charting.Chart, и я хочу увеличить ChartArea с помощью колеса мыши.Пока что не так уж сложно.Теперь я хочу сделать позиционное масштабирование, то есть точка под курсором мыши является центром масштабирования.Хорошо, я сделал простую математику и понял, как рассчитать новый левый / правый конец моей оси.Если я установлю

chart1.ChartAreas["ChartArea1"].AxisX.Minimum

и Maximum на новые значения, это будет работать как шарм.Если я, однако, zoom к значениям, это не работает правильно.Вот мой слушатель колеса мыши:

void Chart1MouseWheel(object sender, MouseEventArgs e)
    {
        var min = chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.ViewMinimum;
        var max = chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.ViewMaximum;
        var oldScale = max - min;

        var newScale = oldScale + (oldScale  * 0.001 * e.Delta);

        // calculate positional zoom
        var xAbs = chart1.ChartAreas["ChartArea1"].AxisX.PixelPositionToValue(e.X);
        var xRel = (xAbs - min)/(max - min);
        var min2 = min + oldScale*xRel - newScale*xRel;

        var max2 = min2 + newScale;

        // if i do that, it works perfectly
        //chart1.ChartAreas["ChartArea1"].AxisX.Minimum = min2;
        //chart1.ChartAreas["ChartArea1"].AxisX.Maximum = max2;

        // this does NOT work (at least not exactly)
        chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoom(min2, max2);
    }

Что я сделал не так?Как правильно использовать Zoom?

Причина, по которой я хочу использовать масштабирование, заключается в том, что это активирует полосу прокрутки внизу графика.

1 Ответ

1 голос
/ 18 февраля 2012

Попробуйте это

chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoom(min2, max2-min2);

...