Управление SciChartLegend - это просто ItemsControl, который отображает данные путем привязки к ObservableCollection SeriesInfo через свойство LegendModifier.LegendData.
На английском языке это означает, что если вы можете понять, как отобразить иерархическую группу в ItemsControl, вы можете сделать то же самое в элементе управления SciChart Legend.
Возможно, вам понадобится создать собственный класс, наследующий элемент ItemsControl, для привязки к LegendModifier.LegendData и группировать элементы по вашему желанию. Или, используйте присоединенное поведение или конвертер для группировки элементов.
Далее вы можете использовать свой собственный класс или ItemsControl (вместо SciChartLegend), используя технику в LegendModifier Documentation.
В качестве альтернативы - Привязка LegendModifier.LegendData к SciChartLegend
Вы можете альтернативно связать LegendModifier.LegendData с SciChartLegend и разместить в любом месте вашего приложения. Вы также можете привязать LegendModifier.LegendData к ItemsControl.ItemsSource и создать шаблон по своему усмотрению.
<!-- Somewhere else in your application, you can declare n ItemsControl -->
<!-- and bind to LegendModifier.LegendData -->
<ItemsControl
Margin="23,23"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"
<!-- Here you may need a converter or attached behaviour to group the SeriesInfo as you wish -->
ItemsSource="{Binding LegendData.SeriesInfo, ElementName=legendModifier, Mode=OneWay}">
<ItemsControl.ItemTemplate>
<!-- Here you may need a Hierachical Data Template to display hierachical data -->
<DataTemplate x:Key="SciChartLegendItemTemplate" DataType="chartData:SeriesInfo">
<StackPanel Orientation="Horizontal">
<CheckBox Margin="5,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
IsChecked="{Binding RenderableSeries.IsVisible, Mode=TwoWay}"
Visibility="Visible" />
<r:PointMarker Width="40"
Height="10"
Margin="5,0,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
DataContext="{Binding RenderableSeries}"
DeferredContent="{Binding LegendMarkerTemplate}"
Visibility="{Binding ShowSeriesMarkers, RelativeSource={RelativeSource AncestorType=visuals:SciChartLegend}, Converter={StaticResource BooleanToVisibilityConverter}}" />
<TextBlock Margin="5,0,5,0"
HorizontalAlignment="Left"
Text="{Binding SeriesName}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Хотя что-то вроде это не полное решение, он показывает вам, как использовать API SciChart Legend, чтобы подставлять элементы легенды ItemsControl и шаблоны , Из этого можно надеяться, что вы сможете группировать элементы и отображать данные иерархически.
Привет, я старался следовать вашему совету, но, честно говоря, я не совсем понял это. Честно говоря, я даже не уверен, предложили ли вы 2 или 3 альтернативных решения. Я попытался создать пользовательский LegendModifier.LegendTemplate, который отобразит мою настраиваемую структуру. Я создал шаблон для группы, которая включает элемент ItemsControl для содержимого группы. У этого элемента ItemsControl будет другой настраиваемый шаблон. Результат не показал никакой легенды. К сожалению, с моим ограниченным знанием WPF, слишком много уконов для меня, чтобы иметь представление о том, где я ошибся. – Shaggydog
Я хотел бы сосредоточиться на этой части вашего ответа: «Вам может понадобиться создать свой собственный класс, наследующий от ItemsControl, для привязки к LegendModifier.LegendData и группировать элементы по вашему желанию». Означает ли это, что я могу оставить модификатор легенды, как есть, и просто создать пользовательскую реализацию ItemsControl, которая будет обрабатывать группировку отдельно?Тогда мой вопрос: как заставить SciChart использовать этот настраиваемый элемент управления вместо легенды SciChart? – Shaggydog
Да, это точно. SciChartLegend - это просто элемент ItemsControl, который был настроен на то, чтобы заставить его работать из коробки. Документация LegendModifier здесь http://www.scichart.com/documentation/v4.x/LegendModifier.html имеет раздел «Альтернативно - привязка LegendModifier.LegendData к SciChartLegend». LegendModifier.LegendData - это просто коллекция SeriesInfo. SeriesInfo подробно обсуждается на http://www.scichart.com/documentation/v4.x/SeriesInfo%20%E2%80%93%20the%20ViewModels%20for%20Tooltips%20and%20Legends.html. Я предлагаю открыть новый вопрос, если вы хотите больше деталей! –