У меня есть элемент управления MsChart с несколькими сериями SeriesChartType.Polar. В случае события MouseMove в чарте я проверяю, над ним ли это над DataPoint, и если да, я создаю подсказку, содержащую координаты DataPoint под курсором мыши.
Он хорошо работает для углов (это полярная диаграмма) от 0 до 347 град. Остальная часть DataPoints скрыта под ChartElementType.Axis и/или ChartElementType.AxisLabel, поэтому я не могу получить DataPoint.PointIndex.
private void chart0_MouseMove(object sender, MouseEventArgs e)
{
var pos = e.Location;
HitTestResult result = chart0.HitTest(e.X, e.Y);
if (result.ChartElementType == ChartElementType.DataPoint )
{
var selectedValueY = chart0.Series[result.Series.Name].Points[result.PointIndex].YValues[0];
var selectedValueX = chart0.Series[result.Series.Name].Points[result.PointIndex].XValue;
selectedValueY = Math.Round(selectedValueY, 2);
ToolTipChart.Show(selectedValueX.ToString() + "°; " + selectedValueY.ToString() + " m", chart0, pos.X, pos.Y - 30);
}
else
ToolTipChart.Hide(chart0);
}
Когда мышь над скрытыми DataPoints → (result.ChartElementType == ChartElementType.Axis) или (result.ChartElementType == ChartElementType.AxisLabel) вместо этого.
Я попытался отключить ось, затем прочитал позицию мыши, затем включил ось, но она слишком медленная, и пользователь видит мигание оси на экране.
Есть ли способ переместить "слой DataPoint" поверх диаграммы, чтобы он не находился под слоем "Axis"?
Илюстирование скрытых данных:
Theres - функция перегрузки Chart.HitTest Method (Int32, Int32, ChartElementType)
где вы можете фильтровать требуемый тип ChartElementType.
http://msdn.microsoft.com/en-us/library/dd467907%28v=vs.110%29.aspx