Esempio n. 1
0
        /// <summary>
        ///     Updates the value margins after all data points are updated.
        /// </summary>
        protected override void OnAfterUpdateDataPoints()
        {
            IValueMarginProvider provider = this;

            {
                var consumer = ActualDependentRangeAxis as IValueMarginConsumer;
                if (consumer != null)
                {
                    consumer.ValueMarginsChanged(provider, GetValueMargins(consumer));
                }
            }
            {
                var consumer = ActualIndependentAxis as IValueMarginConsumer;
                if (consumer != null)
                {
                    consumer.ValueMarginsChanged(provider, GetValueMargins(consumer));
                }
            }
            base.OnAfterUpdateDataPoints();
        }
Esempio n. 2
0
        /// <summary>
        /// Updates the layout of the axis to accommodate a sequence of value
        /// margins.
        /// </summary>
        /// <param name="provider">A value margin provider.</param>
        /// <param name="valueMargins">A sequence of value margins.</param>
        void IValueMarginConsumer.ValueMarginsChanged(IValueMarginProvider provider, IEnumerable <ValueMargin> valueMargins)
        {
            Action action = () =>
            {
                if (this.Orientation != AxisOrientation.None)
                {
                    // Determine if any of the value margins are outside the axis
                    // area.  If so update range.
                    bool updateRange =
                        valueMargins
                        .Select(
                            valueMargin =>
                    {
                        double coordinate = GetPlotAreaCoordinate(valueMargin.Value).Value;
                        return(new Range <double>(coordinate - valueMargin.LowMargin, coordinate + valueMargin.HighMargin));
                    })
                        .Where(range => range.Minimum <0 || range.Maximum> this.ActualLength)
                        .Any();

                    if (updateRange)
                    {
                        UpdateActualRange();
                    }
                }
            };

            // Repeat this after layout pass.
            if (this.ActualLength == 0)
            {
#pragma warning disable 4014
                this.Dispatcher.RunAsync(CoreDispatcherPriority.High, new DispatchedHandler(action));
#pragma warning restore 4014
            }
            else
            {
                action();
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Updates the layout of the axis to accommodate a sequence of value
        /// margins.
        /// </summary>
        /// <param name="provider">A value margin provider.</param>
        /// <param name="valueMargins">A sequence of value margins.</param>
        void IValueMarginConsumer.ValueMarginsChanged(IValueMarginProvider provider, IEnumerable<ValueMargin> valueMargins)
        {
            Action action = () =>
                {
                    if (this.Orientation != AxisOrientation.None)
                    {
                        // Determine if any of the value margins are outside the axis
                        // area.  If so update range.
                        bool updateRange =
                            valueMargins
                                .Select(
                                    valueMargin =>
                                    {
                                        double coordinate = GetPlotAreaCoordinate(valueMargin.Value).Value;
                                        return new Range<double>(coordinate - valueMargin.LowMargin, coordinate + valueMargin.HighMargin);
                                    })
                                .Where(range => range.Minimum < 0 || range.Maximum > this.ActualLength)
                                .Any();

                        if (updateRange)
                        {
                            UpdateActualRange();
                        }
                    }
                };
            
            // Repeat this after layout pass.
            if (this.ActualLength == 0)
            {
                this.Dispatcher.BeginInvoke(action);
            }
            else
            {
                action();
            }
        }