private static void OnClipToPlotAreaChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ChartSeries series = d as ChartSeries; series.InvalidateCore(); }
private static void OnIsSelectedBindingChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ChartSeries series = d as ChartSeries; series.dataSource.IsSelectedBinding = e.NewValue as DataPointBinding; }
/// <summary> /// Gets <see cref="ChartDataContext"/> associated with a gives physical location. /// </summary> /// <param name="tapLocation">The relative physical position of the requested data context.</param> /// <param name="pointDistanceMode">The point distance calculation mode to be used in finding closest point.</param> /// <returns>Returns <see cref="ChartDataContext"/> object holding information for the requested physical location.</returns> protected virtual ChartDataContext GetDataContextCore(Point tapLocation, ChartPointDistanceCalculationMode pointDistanceMode) { List <DataPointInfo> closestPoints = new List <DataPointInfo>(); double totalMinDistance = double.PositiveInfinity; DataPointInfo closestPoint = null; foreach (ChartSeriesModel series in this.chartArea.Series) { if (!series.Presenter.IsVisible) { continue; } DataPointInfo currentClosestDataPoint = null; double minDistance = double.PositiveInfinity; ChartSeries visualSeries = series.presenter as ChartSeries; foreach (DataPoint dataPoint in series.DataPointsInternal) { if (dataPoint.isEmpty) { continue; } double distance; if (dataPoint.ContainsPosition(tapLocation.X, tapLocation.Y)) { distance = 0; } else { distance = visualSeries.GetDistanceToPoint(dataPoint, tapLocation, pointDistanceMode); } if (distance < minDistance) { minDistance = distance; if (currentClosestDataPoint == null) { currentClosestDataPoint = new DataPointInfo(); } currentClosestDataPoint.DataPoint = dataPoint; currentClosestDataPoint.SeriesModel = series; } if (distance < totalMinDistance) { totalMinDistance = distance; closestPoint = currentClosestDataPoint; if (distance == 0) { closestPoint.ContainsTouchLocation = true; } } } if (currentClosestDataPoint != null) { closestPoints.Add(currentClosestDataPoint); } } return(new ChartDataContext(closestPoints, closestPoint) { TouchLocation = tapLocation }); }