wpf-devexpress-dot-xpf-dot-charts-dot-automatictimespanscaleoptions-0253f53b.md
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
[Browsable(false)]
public ITimeSpanMeasureUnitsCalculator AutomaticMeasureUnitsCalculator { get; set; }
<Browsable(False)>
Public Property AutomaticMeasureUnitsCalculator As ITimeSpanMeasureUnitsCalculator
| Type | Description |
|---|---|
| ITimeSpanMeasureUnitsCalculator |
An object of the class that implements the ITimeSpanMeasureUnitsCalculator interface.
|
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:
<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>
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;
}
}
}
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