public static Range <T> Sum <T>(this IEnumerable <Range <T> > that)
            where T : IComparable
        {
            Range <T> sum = new Range <T>();
            IEnumerator <Range <T> > enumerator = that.GetEnumerator();

            while (enumerator.MoveNext())
            {
                sum = sum.Add(enumerator.Current);
            }
            return(sum);
        }
예제 #2
0
        /// <summary>
        /// Updates the actual range displayed on the axis.
        /// </summary>
        private void UpdateActualRange()
        {
            Action action = () =>
            {
                Range <IComparable> dataRange = new Range <IComparable>();
                if (ProtectedMaximum == null || ProtectedMinimum == null)
                {
                    if (Orientation == AxisOrientation.None)
                    {
                        if (ProtectedMinimum != null)
                        {
                            this.ActualRange = OverrideDataRange(new Range <IComparable>(ProtectedMinimum, ProtectedMinimum));
                        }
                        else
                        {
                            this.ActualRange = OverrideDataRange(new Range <IComparable>(ProtectedMaximum, ProtectedMaximum));
                        }
                    }
                    else
                    {
                        IEnumerable <Range <IComparable> > values =
                            this.RegisteredListeners
                            .OfType <IRangeProvider>()
                            .Select(rangeProvider => rangeProvider.GetRange(this));

                        foreach (Range <IComparable> range in values)
                        {
                            dataRange = dataRange.Add(range);
                        }

                        this.ActualRange = OverrideDataRange(dataRange);
                    }
                }
                else
                {
                    this.ActualRange = new Range <IComparable>(ProtectedMinimum, ProtectedMaximum);
                }
            };

            // Repeat this after layout pass.
            if (this.ActualLength == 0.0)
            {
#pragma warning disable 4014
                this.Dispatcher.RunAsync(CoreDispatcherPriority.High, new DispatchedHandler(action));
#pragma warning restore 4014
            }

            action();
        }