DevExpress v24.2 Update — Your Feedback Matters
Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.
Take the survey
Not interested
ITimeSpanMeasureUnitsCalculator Interface
Interface that should be implemented by any class that can be used as a time-span measurement unit calculator.
Namespace : DevExpress.Xpf.Charts
Assembly :
DevExpress.Xpf.Charts.v24.2.dll
NuGet Package :
DevExpress.Wpf.Charts
# Declaration
public interface ITimeSpanMeasureUnitsCalculator
Public Interface ITimeSpanMeasureUnitsCalculator
# Related API Members
The following members return ITimeSpanMeasureUnitsCalculator objects:
The ITimeSpanMeasureUnitsCalculator interface provides the CalculateMeasureUnit method that allows computing a time-span measurement unit for the x-axis .
# 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:
<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