private static ChartHitTestResult HandleChartHit(Chart chart, UIElement element, Point point) { var xAxis = chart.XAxis; var yAxis = chart.YAxis; object dataContext; if (element is FrameworkElement && GetIsDataPoint(element)) { dataContext = ((FrameworkElement)element).DataContext; } else { dataContext = element.GetVisualAncestors() .OfType<FrameworkElement>() .Where(GetIsDataPoint) .Select(e => e.DataContext) .FirstOrDefault(); } return new ChartHitTestResult { ChartPanel = GetChartPanel(chart), Chart = chart, Visual = element, Data = dataContext, Position = point, X = (xAxis != null) ? xAxis.GetValue(point) : Double.NaN, Y = (yAxis != null) ? yAxis.GetValue(point) : Double.NaN, }; }