Ярлыки формата диаграммы данных визуализации WPF

Я использую диаграммы DataVisualization в WPF и создаю BarSeries в коде, но я не могу получить числа, отформатированные по оси X.

Я не хочу делать это в XAML, потому что тип диаграммы может варьироваться в зависимости от выбора пользователя, и казалось более гибким делать все это в коде, а не иметь разные типы диаграмм. Количество рядов данных также колеблется.

XAML просто

xmlns:chttk="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"

<chttk:Chart Name="DataChart1" Margin="0" Title="{Binding AxisXTitle}" DataContext="{Binding GraphData1}" Style="{StaticResource ChartStyle1}" BorderBrush="Transparent"/>

Код позади

Dim dataChart As System.Windows.Controls.DataVisualization.Charting.Chart = DataChart1
Dim s As New System.Windows.Controls.DataVisualization.Charting.BarSeries
s.Title = "My Chart"
s.DependentValuePath = "Value"
s.IndependentValuePath = "Key"
s.DataContext = New Binding("[0]")
s.ItemsSource = CType(itm, IEnumerable)
dataChart.Series.Add(s)

DataContext - это DataSeries.Collection с данными в KeyValuePairs. Все значения являются двойными.

Отображается график, но значения на оси не отформатированы, например, 120000. Я нашел несколько примеров, указывающих на различные типы осей, а также LabelFormat и LabelStyle.Format, но я не могу найти ничего, что работает в среде WPF в код позади.

1 ответ

Спасибо за ввод - мне наконец-то удалось заставить его работать со следующим кодом:

Dim n As Integer
dataChart.Series.Clear()
Dim x As New System.Windows.Controls.DataVisualization.Charting.LinearAxis
x.Orientation = DataVisualization.Charting.AxisOrientation.X
Dim y As New System.Windows.Controls.DataVisualization.Charting.CategoryAxis
y.Orientation = DataVisualization.Charting.AxisOrientation.Y
Dim stl As New Style(GetType(System.Windows.Controls.DataVisualization.Charting.AxisLabel))
stl.Setters.Add(New Setter(System.Windows.Controls.DataVisualization.Charting.AxisLabel.StringFormatProperty, "{0:#,0}"))
x.AxisLabelStyle = stl
For Each itm As Object In o
    Dim srs As New System.Windows.Controls.DataVisualization.Charting.BarSeries
    pi = itm.GetType.GetProperty("SeriesTitle")
    srs.Title = pi.GetValue(itm, Nothing)
    srs.DependentValuePath = "Value"
    srs.IndependentValuePath = "Key"
    srs.DataContext = New Binding("[" & n & "]")
    srs.ItemsSource = CType(itm, IEnumerable)
    srs.DependentRangeAxis = x
    srs.IndependentAxis = y
    dataChart.Series.Add(srs)
    n += 1
Next

Некоторые из ошибок, которые меня сбили, добавляли ось. Вам необходимо добавить правильный тип оси в DependentRangeAxis или IndependentAxis. В случае BarSeries значение DependentRangeAxis является осью X и может быть LinearAxis, а значение IndependentAxis является осью Y, а для меня это было значением CategoryAxis. Также, если у вас есть несколько рядов, вам нужно применить одну и ту же ось ко всем сериям.

Надеюсь, это поможет кому-то еще.

Другие вопросы по тегам