Ярлыки формата диаграммы данных визуализации 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. Также, если у вас есть несколько рядов, вам нужно применить одну и ту же ось ко всем сериям.
Надеюсь, это поможет кому-то еще.