У меня есть 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
?
Причина, по которой я хочу использовать масштабирование, заключается в том, что это активирует полосу прокрутки внизу графика.