Back to Devexpress

AutomaticTimeSpanScaleOptions.AutomaticMeasureUnitsCalculator Property

wpf-devexpress-dot-xpf-dot-charts-dot-automatictimespanscaleoptions-0253f53b.md

latest5.8 KB
Original Source

AutomaticTimeSpanScaleOptions.AutomaticMeasureUnitsCalculator Property

Gets or sets the automatic date-time measure unit calculator.

Namespace : DevExpress.Xpf.Charts

Assembly : DevExpress.Xpf.Charts.v25.2.dll

NuGet Package : DevExpress.Wpf.Charts

Declaration

csharp
[Browsable(false)]
public ITimeSpanMeasureUnitsCalculator AutomaticMeasureUnitsCalculator { get; set; }
vb
<Browsable(False)>
Public Property AutomaticMeasureUnitsCalculator As ITimeSpanMeasureUnitsCalculator

Property Value

TypeDescription
ITimeSpanMeasureUnitsCalculator

An object of the class that implements the ITimeSpanMeasureUnitsCalculator interface.

|

Example

The automatic time-span scale options allow you to create a measurement unit calculator to determine the current measurement unit if the predefined one does not fit your requirements. Create a class that implements the ITimeSpanMeasureUnitsCalculator interface and assign it to the AutomaticMeasureUnitsCalculator property to use a custom measurement units calculation algorithm:

xaml
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TimeSpanExample"
        xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" 
        x:Class="TimeSpanExample.MainWindow"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:ChartViewModel/>
    </Window.DataContext>
    <Grid>
        <dxc:ChartControl>
            <dxc:XYDiagram2D>
                <dxc:XYDiagram2D.AxisX>
                    <dxc:AxisX2D>
                        <dxc:AxisX2D.TimeSpanScaleOptions>
                            <dxc:AutomaticTimeSpanScaleOptions AggregateFunction="Average">
                                <dxc:AutomaticTimeSpanScaleOptions.AutomaticMeasureUnitsCalculator>
                                    <local:CustomAutomaticTimeSpanMeasureUnitsCalculator/>
                                </dxc:AutomaticTimeSpanScaleOptions.AutomaticMeasureUnitsCalculator>
                            </dxc:AutomaticTimeSpanScaleOptions>
                        </dxc:AxisX2D.TimeSpanScaleOptions>
                    </dxc:AxisX2D>
                </dxc:XYDiagram2D.AxisX>
            </dxc:XYDiagram2D>
        </dxc:ChartControl>
    </Grid>
</Window>
csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using DevExpress.Xpf.Charts;

namespace TimeSpanExample {
    public class CustomAutomaticTimeSpanMeasureUnitsCalculator : ITimeSpanMeasureUnitsCalculator {
        public TimeSpanMeasureUnit CalculateMeasureUnit(IEnumerable<Series> series, 
            double axisLength, int pixelsPerUnit, 
            double visualMin, double visualMax, 
            double wholeMin, double wholeMax) {
            double rawMeasureUnit = (visualMax - visualMin) / axisLength * pixelsPerUnit;
            return PickTimeSpanMeasureUnit(rawMeasureUnit);
        }
        static int[] unitMultipliers = { 1, 1000, 60, 60, 24 };
        static TimeSpanMeasureUnit PickTimeSpanMeasureUnit(double milliseconds) {
            double valueStop = 1.0;
            for (int i = 0; i < unitMultipliers.Length; i++) {
                valueStop *= unitMultipliers[i];
                if (milliseconds <= valueStop)
                    return (TimeSpanMeasureUnit)i;
            }
            return TimeSpanMeasureUnit.Hour;
        }
    }
}
vb
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Windows
Imports DevExpress.Xpf.Charts

Namespace TimeSpanExample
    Public Class CustomAutomaticTimeSpanMeasureUnitsCalculator
        Implements ITimeSpanMeasureUnitsCalculator

        Public Function CalculateMeasureUnit(ByVal series As IEnumerable(Of Series), ByVal axisLength As Double, ByVal pixelsPerUnit As Integer, ByVal visualMin As Double, ByVal visualMax As Double, ByVal wholeMin As Double, ByVal wholeMax As Double) As TimeSpanMeasureUnit Implements ITimeSpanMeasureUnitsCalculator.CalculateMeasureUnit
            Dim rawMeasureUnit As Double = (visualMax - visualMin) / axisLength * pixelsPerUnit
            Return PickTimeSpanMeasureUnit(rawMeasureUnit)
        End Function
        Private Shared unitMultipliers() As Integer = { 1, 1000, 60, 60, 24 }
        Private Shared Function PickTimeSpanMeasureUnit(ByVal milliseconds As Double) As TimeSpanMeasureUnit
            Dim valueStop As Double = 1.0
            For i As Integer = 0 To unitMultipliers.Length - 1
                valueStop *= unitMultipliers(i)
                If milliseconds <= valueStop Then
                    Return CType(i, TimeSpanMeasureUnit)
                End If
            Next i
            Return TimeSpanMeasureUnit.Hour
        End Function
    End Class
End Namespace

See Also

AutomaticTimeSpanScaleOptions Class

AutomaticTimeSpanScaleOptions Members

DevExpress.Xpf.Charts Namespace