Esempio n. 1
0
        private static void OnClipToPlotAreaChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ChartSeries series = d as ChartSeries;

            series.InvalidateCore();
        }
Esempio n. 2
0
        private static void OnIsSelectedBindingChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ChartSeries series = d as ChartSeries;

            series.dataSource.IsSelectedBinding = e.NewValue as DataPointBinding;
        }
Esempio n. 3
0
        /// <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
            });
        }