SciChart - 在轴图例中显示分层列表

时间:2016-05-11 13:41:06

标签: scichart

我有分层次分组的数据系列。我需要图表图例来反映这种结构(见截图)

[编辑:删除图片以防止潜在的客户端IP问题]

关闭组应自然关闭所有子轴。 是否可以使用内置轴图例执行此操作?如果是这样,你能提供一些指示吗? (因为目前我没有最微弱的想法) 如果没有,最好的解决方法是什么?禁用图例,实现自定义控件,然后动态更改SeriesSource绑定属性?

1 个答案:

答案 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和模板图例项。希望您能够按照分层方式对项目进行分组并显示数据。