我有分层次分组的数据系列。我需要图表图例来反映这种结构(见截图)
[编辑:删除图片以防止潜在的客户端IP问题]
关闭组应自然关闭所有子轴。 是否可以使用内置轴图例执行此操作?如果是这样,你能提供一些指示吗? (因为目前我没有最微弱的想法) 如果没有,最好的解决方法是什么?禁用图例,实现自定义控件,然后动态更改SeriesSource绑定属性?
答案 0 :(得分:0)
SciChartLegend控件只是一个ItemsControl,它通过LegendModifier.LegendData属性绑定到SeriesInfo的ObservableCollection来显示数据。
在英语中,这意味着,如果您可以弄清楚如何在ItemsControl中显示层次结构组,那么您可以在SciChart Legend控件中执行相同的操作。
您可能需要做的是创建自己的类继承自ItemsControl以绑定到LegendModifier.LegendData并根据需要对项目进行分组。或者,使用附加行为或转换器对项目进行分组。
接下来,您可以使用LegendModifier Documentation中的技术使用您自己的类或ItemsControl(而不是SciChartLegend)。
或者 - 将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>
虽然这样的事情不是一个完整的解决方案,但它确实向您展示了如何使用SciChart Legend API替换ItemsControl和模板图例项。希望您能够按照分层方式对项目进行分组并显示数据。