Visiblox Charts 1.9.1 released!

We are delighted to announce the availability of Visiblox Charts 1.9.1.  This version includes a number of new features including:

  • Support for pie charts
  • Support for Windows Phone 7 with API extensions to support zooming and panning via gestures (beta release)
  • Multiple X-axis support, allowing for an arbitrary number of X-axes above and below the chart
  • Mouse-wheel support for zooming
  • Improved legend positioning and styling options
  • New annotation types including event markers and text annotations (premium edition only)
  • New FilteredDataSeries class to make it easier to implement data sampling or filtering (premium edition only)

On top of the above changes we've fixed bugs and have improved performance across a number of scenarios.

Why not grab this new version at and give it a spin?

Please see below for the full set of API changes since version 1.8.1:

  • General
    • Added IAxisAware, IInteractable, IRenderElementOwner, IMarginPreference interfaces
    • Added InvalidatableCollectionBase class
    • UniqueAndNotNullItemsObservableCollection class renamed to UniqueAndNotNullShadowedObservableCollection
    • Added SortedList class
  • Annotations
    • Added TextAnnotation, CalloutTextAnnotation, EventAnnotation classes
    • Added AnnotationBase.PreviewingPropertyChanged method
    • Renamed AnnotationBase.IsEnabled property to IsInteractionEnabled
  • Axes
    • Added DateTimeAxisIntervalSpan.Undefined enumeration member which is the new default for DateTimeAxis.MajorTickIntervalType and DateTimeAxis.MinorTickIntervalType which are now non-nullable
    • Added IAxis.RenderingEnabled property
    • Added AxisLabel.FormatString, AxisLabel.Orientation, AxisLabel.CalculatedWidth and AxisLabel.CalculatedHeight dependency properties
    • Added AxisBase.GetFormattedDataValueInternal method
    • Added new protected virtual method on AxisBase.InvalidateGridlinesAnnotations
    • Added AxisBase.RenderingEnabled dependency property
    • Changed IAxis.ActualRange type from IRange to IRangeWithEffectiveLimits<T>
    • Added IRangeWithEffectiveLimits interface and DoubleRangeWithEffectiveLimits, DateTimeRangeWithEffectiveLimits, CategoryRangeWithEffectiveLimits classes
    • Removed DiscontinousDateTimeRange
    • Removed ContrinousRangeBase
    • DoubleRange and DateTimeRange now inherit from RangeBase<T>
    • Added IAxis.IsDataValueRenderable() method
    • Renamed IsMarginEnabled property to IsAutoMarginEnabled
    • Removed AxisBase.GetDataValueAsRenderPositionWithZoomInternal and AxisBase.GetDataValueAsRenderPositionWithoutZoomInternal
    • Added AxisBase GetAxisValueAsRenderPosition
    • Added AxisPanel.IsElementHidden dependency property
    • Added AxisLabel.FitToAxisSize dependency property
    • Changed DiscontinuousDateTimeAxis.FilterDateValues visibility from protected to protected virtual
  • Behaviours
    • Added ZoomBehaviour.DisableAxisRendering and PanBehaviour.DisableAxisRendering dependency properties to allow the behaviours to disable axis rendering for the duration of an animation or user interaction to improve performance
    • Added MouseWheel method to IBehaviour and all implementations
    • Added HideCollidingAxisLabels, XAxisLabelFormatString, XAxisLabelHorizontalAlignment, XAxisLabelVerticalAlignment, YAxisLabelFormatString, YAxisLabelHorizontalAlignment, YAxisLabelVerticalAlignment DPs to CrosshairBehaviour
    • Added BehaviourBase.Tag property
    • TrackballBehaviour inherits from BehaviourBase instead of BehaviourWithAxesBase
    • Added ZoomMode enumeration
    • Added TrackingSnapPattern class
    • Added TrackballBehaviour.SnapMode property
  • Chart
    • Added Chart.SecondaryXAxis, Chart.AdditionalPrimaryXAxis and Chart.AdditionalSecondaryXAxis
    • Added Chart.SetAxisRenderingEnabledState method
  • Data and ChartSeries
    • Added FilteredDataSeries, IFilterStrategy, WindowedFilterStrategy classes
    • Added IChartSeries. Init, IChartSeries.DeInit methods
    • Added IChartSeries.IsPointRenderable
    • Removed ChartSeriesBase. GetPointValueOnXAxis and ChartSeriesBase. GetPointValueOnYAxis methods
    • Added ChartSeriesBase.ClearCanvas method
    • Added DataPoint.Tag property
    • Changed signatures for MultiValueSeriesBase.UpdatePoint, and MultiValueSeriesBase.UpdatePointInteractionHelper methods
    • Changed MultiValueSeriesBase.StyleNormalPoint, MultiValueSeriesBase.StyleHighlightedPoint, MultiValueSeriesBase.StyleSelectedPoint methods from protected abstract to protected virtual
    • Added MultiValueSeriesBase.PositionPointOnZoomCanvas method
    • Added TemplatedLineSeries.SetCenteredStyleOnPoint method
  • Invalidation
    • Added IInvalidatable.Invalidate method
    • Added InvalidationHandler.CancelInvalidationRequest method
  • Legend
    • Added LegendVerticalAlignment, LegendHorizontalAlignment and LegendPosition DPs to Chart
    • Added LegendPosition enum
    • Added IsDisplayedOnLegend property to IChartSeries
    • Added LegendMaxHeightRatio DP to Chart
  • Pie charts
    • Added PieChart class
    • Added PiePiece class
  • Range
    • Removed IRange.EffectiveMinimum, IRange.EffectiveMaximum properties
    • Removed IRange.ToDiscreteValueRange and IRange.ToContinuousValueRange methods.
    • Added IRangeWithEffectiveLimits interface and implementations
    • Added RangeBase.Tag property



you wrote: Removed IRange.EffectiveMinimum, IRange.EffectiveMaximum properties

Why ? What can I use instead? How can see now the new zoomed Range ??

Best Regards Matthias

Posted by Matthias

Hi Matthias,

Sorry that's an omission above. All we've done is move the EffectiveMinimum and EffectiveMaximum onto a new interface called IRangeWithEffectiveLimits. Axis.Range is now an IRange and Axis.ActualRange is an IRangeWithEffectiveLimits. The reason for this is that the user should never have to set the effective range so we didn't want to expose that through Axis.Range.

As long as you're listening to ActualRange (which you should be anyway if you want to be notified of zoom changes) it should all still work as before just with a different interface.



Posted by Jesse Beaumont

Hi Jesse,

thanks for your declaration, but the new interface is not working like the old one. When the ZoomEnded event is fired the ActualRange.EffectiveMinimum / Maximum (DateTimeAxis) values are not changing. And caused of this I'm not able to calulate (filtering) my input data to the new range. The version before did deliver the new Range values in EffectiveMinimum / EffectiveMaximum when the ZoomEnded event was fired.

Best Regards, Matthias

Posted by Matthias

I tested this again this morning with 1.9.1 and it seems to work fine for me here. I'll PM you to see if we can figure out what's going on with your solution.

Posted by Jesse Beaumont

Thanks for 1.9.3, which is working very well, and your brilliant support. Best Regards, Matthias

Posted by Matthias

Post a comment