{"id":7995,"date":"2023-10-24T11:30:07","date_gmt":"2023-10-24T10:30:07","guid":{"rendered":"https:\/\/www.scichart.com\/?p=7995"},"modified":"2023-10-24T11:45:14","modified_gmt":"2023-10-24T10:45:14","slug":"scichart-wpf-v8-0-released","status":"publish","type":"post","link":"https:\/\/www.scichart.com\/scichart-wpf-v8-0-released\/","title":{"rendered":"SciChart WPF v8.0 Released!"},"content":{"rendered":"

SciChart WPF is now ten years young and still remains the highest rated WPF Chart Control<\/a>, and best WPF chart<\/a> on the market!<\/p>\n

Today we are pleased to announce continued improvement to our flagship product: SciChart WPF: v8.0.<\/strong> This update (v8.0.0 build 27737<\/em>) includes a number of features & improvements. To find out what is new, read on below!<\/p>\n

What\u2019s New in SciChart v8.0?<\/strong><\/h3>\n

Version 8.0 at a glance:<\/p>\n

    \n
  1. New 3D Axis Label, Title positioning algorithm in SciChart 3D<\/a><\/li>\n
  2. Configurable Orientation for Axis Labels and Titles in SciChart 3D<\/a><\/li>\n
  3. Added Styling for Axis Titles in SciChart 3D<\/a><\/li>\n
  4. Configurable 3D Axis Cube Sides\/Wall\/Axis visibility<\/a><\/li>\n
  5. Faster VisualXcceleratorEngine Startup, Async Startup and auto cleanup<\/a><\/li>\n
  6. Multiple UI Threads Support for the VisualXccelerator Renderer<\/a><\/li>\n
  7. Multiple Application Domains Support for the VisualXccelerator Renderer<\/a><\/li>\n
  8. Improved 2D Text Drawing API<\/a><\/li>\n
  9. Key Bindings for ChartModifiers<\/a><\/li>\n
  10. Updated Homepage for the SciChart WPF Examples App<\/a><\/li>\n
  11. WPF Examples Export with NuGet Packages<\/a><\/li>\n
  12. Reworked a 3D Example<\/a><\/li>\n
  13. 5x Faster Line Chart loading with Slim Line Series<\/a><\/li>\n
  14. New DPI-Aware SciChartSurface Example in Sandbox<\/a><\/li>\n
  15. Other Features & Improvements<\/a><\/li>\n
  16. Documentation Updates<\/a><\/li>\n
  17. Bug Fixes<\/a><\/li>\n
  18. Bug Fixes Since v8 Beta<\/a><\/li>\n
  19. Breaking Changes<\/a><\/li>\n<\/ol>\n<\/blockquote>\n

    1. New 3D Axis Label, Title positioning algorithm in SciChart 3D<\/h3>\n

    Totally reworked positioning of Axis Labels and Axis Titles in SciChart 3D in order to provide better experience. Multiple cases of labels and titles overlapping have been resolved with the new positioning system:<\/p>\n

    2. Configurable Orientation for Axis Labels and Titles in SciChart 3D<\/h3>\n

    Added the AxisTitleOrientation<\/strong> and TickLabelOrientation<\/strong> properties to the Axis3D class. They allow to specify desired orientation for the Axis Title and Axis Labels: Auto<\/strong>, Horizontal, Vertical <\/strong>(Vertical is not available for Axis Labels). Vertical and Horizontal orientation modes are relative to the screen boundaries:<\/p>\n

    \"\" \"\"<\/p>\n

    These properties can be set in code as shown in the code snippet below:<\/p>\n

    <s3D:SciChart3DSurface WorldDimensions="200,100,200">\n  <s3D:SciChart3DSurface.XAxis>\n    <s3D:NumericAxis3D AxisTitle="X-Axis" AxisTitleOrientation="Horizontal" TickLabelOrientation="Horizontal" \/>\n  <\/s3D:SciChart3DSurface.XAxis>\n  <s3D:SciChart3DSurface.YAxis>\n    <s3D:NumericAxis3D AxisTitle="Y-Axis" AxisTitleOrientation="Vertical" TickLabelOrientation="Horizontal" \/>\n  <\/s3D:SciChart3DSurface.YAxis>\n  <s3D:SciChart3DSurface.ZAxis>\n    <s3D:NumericAxis3D AxisTitle="Z-Axis" AxisTitleOrientation="Auto" TickLabelOrientation="Auto" \/>\n  <\/s3D:SciChart3DSurface.ZAxis>\n<\/s3D:SciChart3DSurface><\/code><\/pre>\n

    3. Added Styling for Axis Titles in SciChart 3D<\/h3>\n

    In earlier versions of SciChart 3D, Axis Title could not be styled separately from Axis Labels. Now, styling of Axis3D Titles is supported via the TitleStyle<\/strong> property in the Axis3D class. A custom Style with TargetType=”TextBlock” should be provided for styling the Axis Title. At the moment, styling options are limited to FontFamily<\/strong>, FontSize<\/strong> and Foreground<\/strong> settings.<\/p>\n

    The new styling is demonstrated in the “Style 3D Chart”<\/a> example:<\/p>\n

    \"\"<\/p>\n

    The code snippet below demonstrates how to provide a custom Style for an Axis3D Title:<\/p>\n

    <!-- Declare Axis Style with a Title Style -->\n<Style x:Key="YAxisStyle" TargetType="s3D:AxisBase3D">\n  <Setter Property="TitleStyle">\n    <Setter.Value>\n      <Style TargetType="TextBlock">\n        <Setter Property="Foreground" Value="{StaticResource ExtraThemeStrokeBrush_5}" \/>\n        <Setter Property="FontSize" Value="18" \/>\n        <Setter Property="FontFamily" Value="Verdana" \/>\n      <\/Style>\n    <\/Setter.Value>\n  <\/Setter>\n<\/Style>\n\n...\n\n<!-- Apply Axis Styles to the SciChart3DSurface -->\n<s3D:SciChart3DSurface WorldDimensions="200,100,200">\n  <s3D:SciChart3DSurface.XAxis>\n    <s3D:NumericAxis3D AxisTitle="X-Axis" Style="{StaticResource XAxisStyle}" \/>\n  <\/s3D:SciChart3DSurface.XAxis>\n  <s3D:SciChart3DSurface.YAxis>\n    <s3D:NumericAxis3D AxisTitle="Y-Axis" Style="{StaticResource YAxisStyle}" \/>\n  <\/s3D:SciChart3DSurface.YAxis>\n  <s3D:SciChart3DSurface.ZAxis>\n    <s3D:NumericAxis3D AxisTitle="Z-Axis" Style="{StaticResource ZAxisStyle}" \/>\n  <\/s3D:SciChart3DSurface.ZAxis>\n<\/s3D:SciChart3DSurface><\/code><\/pre>\n

    4. Configurable 3D Axis Cube<\/h3>\n

    Axis Cube Planes can be hidden via the AxisPlanes API<\/strong>, which is represented by three static classes ZxAxisPlane<\/strong>, XyAxisPlane<\/strong>, ZyAxisPlane<\/strong> in SciChart.Charting3D.Visuals.AxisLabels namespace. The classes define AxisPlaneVisibilityMode<\/strong> and IsPlaneVisible<\/strong> attached properties. They allow configuring visibility for individual planes of the 3D Axis Cube by specifying whether an Axis Plane should appear by setting\u00a0 the IsPlaneVisible <\/strong>property and also choosing the visible side of the Axis Plane via the AxisPlaneVisibilityMode <\/strong>property. This side visibility setting has three options: Negative, Positive or Auto, which correspond to the directions of World Coordinates in SciChart 3D<\/a>.<\/p>\n

    This is demonstrated in the “Add Geometry to a 3D Chart”<\/a> example:<\/p>\n

    \"\"<\/p>\n

    The usage in code is as follows:<\/p>\n

    <s3D:SciChart3DSurface x:Name="sciChart3DSurface"\n   WorldDimensions="400,400,400"\n   s3D:ZxAxisPlane.AxisPlaneVisibilityMode="NegativeSide"\n   s3D:XyAxisPlane.IsPlaneVisible="False"\n   s3D:ZyAxisPlane.IsPlaneVisible="False">\n<!-- Other SciChart3DSurface settings here -->\n<\/s3D:SciChart3DSurface><\/code><\/pre>\n

    5. Faster VisualXcceleratorEngine Startup, Async Startup and auto cleanup<\/h3>\n

    Added API to manually control VisualXccelerator Engine. It does all drawing when VisualXccelerator renderer (hardware-accelerated renderer) is used.<\/p>\n

    The new API allows for improving startup speed<\/strong> of applications that use SciChart with VisualXccelerator renderer and provides more control over the Engine life time<\/strong>. Specifically, it is possible to start\/restart the engine, choose when to stop it and inspect its status and configuration options during the runtime.<\/p>\n

    There is no explicit way to shut down the engine. This is done intentionally, since stopping the engine during rendering pass would cause a runtime error and result in a non-recoverable crash. However, setting the VisualXcceleratorEngine.UseAutoShutdown<\/strong> property to “True” makes the engine to shut down immefiately if there is no SciChartSurface using it. Otherwise, the engine will shut down when the last renderer instance that is using it is disposed or finalized.<\/p>\n

    The new methods and properties have been added to the SciChart.Charting.VisualXcceleratorEngine<\/strong> static class:<\/p>\n

    \"\"<\/p>\n

    For example, this API is used to configure the VisualXccelerator Engine in the Bootstrapper of SciChart Examples Demo, as shown in the code snippet below. The full source code can be found in Sandbox on our GitHub<\/a>:<\/p>\n

    try\n{\n  VisualXcceleratorEngine.UseAutoShutdown = false;\n  VisualXcceleratorEngine.RestartEngine();\n}\ncatch\n{\n  \/\/ Suppress Vx init errors. All rendering will occur with a fallback\n}<\/code><\/pre>\n

    6. Multiple UI Threads Support for the VisualXccelerator Renderer<\/h3>\n

    The VisualXccelerator renderer now supports multiple UI threads<\/strong>. We reworked SciChart API on the C# side that was used to control the VisualXccelerator Engine, adding appropriate synchronization mechanisms and thus allowing multi-threaded rendering. However, please note that underlying VisualXccelerator Engine works in synchronous manner and rendering is still synchronous in the SciChart native code.<\/p>\n

    This example on SciChart GitHub<\/a> demonstrates how to create a WPF Application with a couple of Windows, where each Window has its own UI thread. Both Windows show SciChart charts that can be configured to use specific renderer via a Style for SciChartSurface found in App.xaml.<\/p>\n

    7. Multiple Application Domains Support for the VisualXccelerator Renderer<\/h3>\n

    Application Domains is a .NET mechanism<\/a> that allows isolating multiple Applications within a single native process.<\/p>\n

    Before SciChart v8, VisualXccelerator Engine that is used for SciChart 3D and hardware-accelerated rendering in SciChart 2D did not allow being shared across multiple Application Domains. Since SciChart v8, the engine allows being used in an application that utilizes multiple Application Domains.<\/p>\n

    However, such support is limited due to the essence of Application Domains, which is isolation at the managed layer. No communication is possible between different Application Domains which makes rendering synchronization impossible. And since renderign with VisualXccelerator Engine is synchronous in its nature, it doesn’t support parallel rendering calls which may be the case when multiple Application Domains use SciChart with the hardware-accelerated renderer.<\/p>\n

    This example on SciChart GitHub<\/a> demonstrates how to use SciChart in a solution that uses multiple Application Domains.<\/p>\n

    8. Improved 2D Text Drawing API<\/h3>\n

    Added the IRenderContext2D.MeasureText(string, float, FontFamily, FontWeight, FontStyle)<\/strong> method to the IRenderContext2D API.
    \nIt provides the means for measuring text size for the particualr renderer in use. The method should be used together with the IRenderContext2D.DrawText(Point, string, float, FontFamily, FontWeight, FontStyle, Color) method to find the size of a text and determine whether it should be drawn of not.
    \nFor example, this is how Heatmap uses these methods to draw text labels in cells:<\/p>\n

    var cellText = RenderableSeries.FormatDataValue(zValue, xInd, yInd);\nvar textSize = renderContext.MeasureText(cellText, fontSize, fontFamily, fontWeight, fontStyle);\nif (textSize.Width < cellRect.Width && textSize.Height < cellRect.Height)\n{ \n  var textPoint = new Point \n  { \n    X = cellRect.Left + (cellRect.Width - textSize.Width) \/ 2,\n    Y = cellRect.Top + (cellRect.Height - textSize.Height) \/ 2 \n  };\n  renderContext.DrawText(textPoint, cellText, fontSize, fontFamily, fontWeight, fontStyle, cellTextColor);\n}<\/code><\/pre>\n

    9. Key Bindings for ChartModifiers<\/h3>\n

    Added the ExecuteWhen <\/strong>property to ChartModifiers that allows specifying a key modifier. When the key is pressed, ChartModifier will be enabled to execute its action.
    \nThis code snippet shows how to specify key modifiers in XAML:<\/p>\n

    <s:SciChartSurface.ChartModifier>\n  <s:ModifierGroup>\n    <s:RubberBandXyZoomModifier ExecuteWhen="Ctrl" \/>\n    <s:ZoomPanModifier ExecuteWhen="Shift" \/>\n    <s:CursorModifier ExecuteWhen="Alt" \/>\n    <s:ZoomExtentsModifier \/>\n  <\/s:ModifierGroup>\n<\/s:SciChartSurface.ChartModifier><\/code><\/pre>\n

    10. Updated Homepage for the SciChart WPF Examples App<\/h3>\n

    Download the demo installer today to see the new-look examples app. Don’t forget you can also clone it on Github here: github.com\/abtsoftware\/scichart.wpf.examples.<\/a><\/p>\n

    \"\"<\/p>\n

    11. WPF Examples Export with NuGet Packages<\/h3>\n

    When exporting examples, there is a new option added that allows to reference the latest SciChart packages<\/strong> from NuGet. This is a handy option to start quickly with a new application that uses SciChart, for creating a demo project, or for making a small example to send to our support:<\/p>\n

    \"\"<\/p>\n

    12. Reworked a 3D Example<\/h3>\n

    The “Add Geometry to a 3D Chart”<\/a> example has been reworked to demonstrate usage of the Coordinate Transformation API<\/a> and the new Axis Planes API<\/strong> in SciChart 3D.<\/p>\n

    \"\"<\/p>\n

    13. 5x Faster Line Chart loading with Slim Line Series<\/h3>\n

    Added a new example that demonstrates a custom SlimLineRenderableSeries<\/strong>.<\/p>\n

    It can be used in performance-demanding scenarios where display of large amount of line series <\/strong>(tens of thousands) is required. The SlimLineRenderableSeries does not derive from the WPF UI types and therefore has an advantage in construction time. This helps to improve chart loading time<\/strong> significantly (can be up to x5 times<\/strong>) in the use-case mentioned above. On the other hand, the drawback<\/strong> of this approach is that SlimLineRenderableSeries cannot participate in Binding and thus may be considered not suitable for MVVM scenarios.<\/p>\n

    The example can be found on SciChart GitHub<\/a>.<\/p>\n

    14. New DPI-Aware SciChartSurface Example in Sandbox<\/h3>\n

    Added a new example that demonstrates how to configure a 2D chart to render scaled-down.<\/p>\n

    From time to time our customers ask how to make a resolution-independent chart. This is important for use-cases where multiple scaling levels (or displays) have to be supported by an application that contains charts. When at high-scaling levels, default SciChart charts may appear blurry because it relies on raster graphics.<\/p>\n

    While SciChart doesn’t support such use-cases out of the box, there is a solution available. It is to scale SciChartSurface down using WPF capabilities (applying a ScaleTransform). This appoach is demonstrated in our new example that can be found on SciChart GitHub:<\/a><\/p>\n

    \"\"\"\"<\/p>\n

    15. Other Features & Improvements<\/h3>\n