Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions topics/en/whats-new-in-2026-volume-1.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
= What's New in 2026 Volume 1

=== DataChart

==== Checkmark Marker Type

A new `Checkmark` value has been added to the link:{DataChartLink}.markertype.html[MarkerType] enumeration, making it available on any series that supports markers in the link:{DataChartLink}.{DataChartName}.html[{DataChartName}], link:{CategoryChartLink}.{CategoryChartName}.html[{CategoryChartName}], and link:{FinancialChartLink}.{FinancialChartName}.html[{FinancialChartName}] controls.

The `Checkmark` shape renders a tick/check symbol at each data point, providing a visually distinct marker option that pairs well with status-oriented or boolean data. Like all other marker types, it respects the series' link:{DataChartLink}.markerseries{ApiProp}MarkerBrush.html[MarkerBrush], link:{DataChartLink}.markerseries{ApiProp}MarkerOutline.html[MarkerOutline], and link:{DataChartLink}.markerseries{ApiProp}MarkerThickness.html[MarkerThickness] properties.

The complete set of supported marker types is documented in the following topic:

- link:datachart-series-markers.html[Data Chart Markers]

==== IsLastLabelMandatory on Category Axes

A new link:{DataChartLink}.categoryaxisbase{ApiProp}IsLastLabelMandatory.html[IsLastLabelMandatory] boolean property has been added to link:{DataChartLink}.categoryaxisbase.html[CategoryAxisBase] and exposed on link:{DataChartLink}.categoryxaxis.html[CategoryXAxis], link:{DataChartLink}.categoryyaxis.html[CategoryYAxis], and link:{DataChartLink}.ordinaltimexaxis.html[OrdinalTimeXAxis].

When an axis `Interval` does not evenly divide the number of data items, the final data item's label is normally skipped. For example, with 11 items and `Interval=3`, labels appear at positions 0, 3, 6, and 9 — the label for the last item (position 10) is never shown.

Setting `IsLastLabelMandatory` to `true` corrects this by replacing the last rendered label with the label of the final data item, ensuring the end of the data range is always visible on the axis. The property only takes effect when the final data item's position is within the current viewport, and has no impact when the interval already lands exactly on the last item.

For convenience, the link:{CategoryChartLink}.{CategoryChartName}.html[{CategoryChartName}] exposes two forwarding properties:

- link:{CategoryChartLink}.{CategoryChartName}{ApiProp}XAxisIsLastLabelMandatory.html[XAxisIsLastLabelMandatory] — forwards to the internal `CategoryXAxis.IsLastLabelMandatory`
- link:{CategoryChartLink}.{CategoryChartName}{ApiProp}YAxisIsLastLabelMandatory.html[YAxisIsLastLabelMandatory] — forwards to the internal `CategoryYAxis.IsLastLabelMandatory`

Note that this property is intentionally ignored on link:{DataChartLink}.categoryangleaxis.html[CategoryAngleAxis] because of its wrap-around nature, and it has no effect on continuous time axes such as link:{DataChartLink}.timexaxis.html[TimeXAxis] or link:{DataChartLink}.categorydatetimexaxis.html[CategoryDateTimeXAxis].

==== Absolute Marker Size Property

A new link:{DataChartLink}.markerseries{ApiProp}MarkerSize.html[MarkerSize] property has been added to link:{DataChartLink}.markerseries.html[MarkerSeries], allowing you to set an exact pixel width and height for markers on any marker-enabled series in the link:{DataChartLink}.{DataChartName}.html[{DataChartName}].

Previously, marker dimensions were determined entirely by the marker template. The new `MarkerSize` property overrides this and renders every marker at the specified size, expressed as a `double` representing pixels. The value applies equally to both the width and height of the marker (markers are always square). This makes it straightforward to produce uniform marker dimensions across multiple series without authoring a custom template.

Setting `MarkerSize` to `NaN` (or leaving it unset) restores the default template-driven behavior. The property is compatible with both standard and lightweight markers (see link:{DataChartLink}.markerseries{ApiProp}UseLightweightMarkers.html[UseLightweightMarkers]).

The `MarkerSize` property is available on all series types that derive from `MarkerSeries`, including:

- link:{DataChartLink}.lineseries.html[LineSeries], link:{DataChartLink}.splineseries.html[SplineSeries], link:{DataChartLink}.areaseries.html[AreaSeries] (Category)
- link:{DataChartLink}.scatterseries.html[ScatterSeries], link:{DataChartLink}.scatterlineseries.html[ScatterLineSeries], link:{DataChartLink}.scattersplineseries.html[ScatterSplineSeries] (Scatter)
- link:{DataChartLink}.bubbleseries.html[BubbleSeries] — note that `BubbleSeries` uses its own radius binding to size each bubble individually and ignores `MarkerSize`

==== RangeBarSeries and VerticalRangeCategorySeries

Two new types have been added to the link:{DataChartLink}.{DataChartName}.html[{DataChartName}]:

*link:{DataChartLink}.verticalrangecategoryseries.html[VerticalRangeCategorySeries]* is a new abstract base class for range category series that use a link:{DataChartLink}.numericxaxis.html[NumericXAxis] for values and a link:{DataChartLink}.categoryyaxis.html[CategoryYAxis] for categories. It is the vertical-orientation counterpart to link:{DataChartLink}.horizontalrangecategoryseries.html[HorizontalRangeCategorySeries] (the existing base for link:{DataChartLink}.rangecolumnseries.html[RangeColumnSeries] and link:{DataChartLink}.rangeareaseries.html[RangeAreaSeries]).

*link:{DataChartLink}.rangebarseries.html[RangeBarSeries]* is a new concrete series that extends `VerticalRangeCategorySeries` and renders each category as a horizontal bar spanning from a low value to a high value along the X axis. It relates to link:{DataChartLink}.rangecolumnseries.html[RangeColumnSeries] in the same way that link:{DataChartLink}.barseries.html[BarSeries] relates to link:{DataChartLink}.columnseries.html[ColumnSeries].

`RangeBarSeries` requires `HighMemberPath` and `LowMemberPath` data bindings to define the extent of each bar. Corner rounding can be controlled via the `RadiusX` and `RadiusY` properties. The series also provides `LowMemberAsLegendLabel`, `HighMemberAsLegendLabel`, `LowMemberAsLegendUnit`, and `HighMemberAsLegendUnit` for customizing how values appear in the link:{DataChartLink}.datatooltiplayerlayer.html[DataToolTipLayer] and link:{DataChartLink}.{DataLegendName}.html[{DataLegendName}].

The following XAML snippet shows a basic configuration:

[source,xaml]
----
<ig:XamDataChart x:Name="DataChart">
<ig:XamDataChart.Axes>
<ig:NumericXAxis x:Name="xAxis" />
<ig:CategoryYAxis x:Name="yAxis"
ItemsSource="{Binding}"
Label="{}{Label}" />
</ig:XamDataChart.Axes>
<ig:XamDataChart.Series>
<ig:RangeBarSeries
ItemsSource="{Binding}"
HighMemberPath="High"
LowMemberPath="Low"
Title="Range"
XAxis="{Binding ElementName=xAxis}"
YAxis="{Binding ElementName=yAxis}" />
</ig:XamDataChart.Series>
</ig:XamDataChart>
----