2016-05-11 7 views
1

Ich habe Datenserien, die hierarchisch gruppiert sind. Ich brauche die Legende Diagramm diese Struktur zu reflektieren (siehe Screenshot)SciChart - hierarchische Liste in Achsenlegende anzeigen

enter image description here

eine Gruppe ausschalten sollte natürlich alle seine untergeordneten Achsen abschalten. Ist es möglich, dies mit der eingebauten Achsenlegende zu tun? Wenn ja, könnten Sie einige Hinweise dazu geben, wie? (Weil ich zur Zeit nicht die geringste Ahnung habe) Wenn nicht, was wäre die beste Problemumgehung? Deaktivieren Sie die Legende, implementieren Sie ein benutzerdefiniertes Steuerelement, und ändern Sie dann dynamisch die SeriesSource-gebundene Eigenschaft?

Antwort

0

Das Steuerelement SciChartLegend ist einfach ein ItemsControl, das Daten durch Bindung an eine ObservableCollection von SeriesInfo über die LegendModifier.LegendData-Eigenschaft anzeigt.

In Englisch bedeutet das, wenn Sie herausfinden können, wie eine hierarchische Gruppe in einem ItemsControl angezeigt wird, können Sie das gleiche im SciChart Legend-Steuerelement tun.

Sie müssen möglicherweise Ihre eigene Klasse erstellen, die von ItemsControl erbt, um an LegendModifier.LegendData zu binden und die Elemente nach Ihren Wünschen zu gruppieren. Oder verwenden Sie ein angehängtes Verhalten oder einen Konverter, um Elemente zu gruppieren.

Als nächstes können Sie Ihre eigene Klasse oder ItemsControl (anstelle von SciChartLegend) mit der Technik in der LegendModifier Documentation verwenden.

Alternativ - LegendModifier.LegendData Bindung an SciChartLegend

Sie alternativ LegendModifier.LegendData zu einem SciChartLegend und platzieren überall in Ihrer Anwendung binden können. Sie können auch eine LegendModifier.LegendData an eine ItemsControl.ItemsSource binden und sie nach Ihren Wünschen anpassen.

<!-- 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> 

Während so etwas wie dies keine vollständige Lösung ist, tut es Ihnen zeigen, wie der SciChart Legend API verwenden, um ein Item und Vorlage Legendenelemente zu ersetzen . Daraus sollten Sie hoffentlich in der Lage sein, die Elemente gruppieren und Daten hierarchisch darstellen zu können.

+0

Hallo, ich habe versucht, Ihrem Rat zu folgen, aber ehrlich gesagt habe ich es nicht ganz verstanden. Um ehrlich zu sein, bin ich mir nicht einmal sicher, ob Sie 2 oder 3 alternative Lösungen vorgeschlagen haben. Ich habe versucht, eine benutzerdefinierte LegendModifier.LegendTemplate zu erstellen, die meine benutzerdefinierte Struktur anzeigen würde. Ich habe eine Vorlage für eine Gruppe erstellt, die ein ItemsControl für den Inhalt der Gruppe enthält. Dieses ItemsControl hätte eine andere benutzerdefinierte Vorlage. Das Ergebnis war keinerlei Legende. Leider gibt es aufgrund meiner begrenzten Kenntnisse von WPF zu viele Unbekannte, um eine Vorstellung davon zu haben, wo ich falsch gelaufen bin. – Shaggydog

+0

Ich möchte mich auf diesen Teil Ihrer Antwort konzentrieren: "Sie müssen möglicherweise eine eigene Klasse erstellen, die von ItemsControl erbt, um an LegendModifier.LegendData zu binden und die Elemente nach Belieben zu gruppieren." Bedeutet das, dass ich den Legendenmodifikator unverändert lassen kann und nur eine benutzerdefinierte ItemsControl-Implementierung erstellen kann, die die Gruppierung getrennt behandelt?Dann ist meine Frage, wie kann ich das SciChart dazu bringen, dieses benutzerdefinierte Steuerelement anstelle einer SciChart-Legende zu verwenden? – Shaggydog

+0

Ja das ist genau richtig. SciChartLegend ist einfach ein ItemsControl, das als Vorlage dient, damit es sofort einsatzbereit ist. Die LegendModifier-Dokumentation http://www.scichart.com/documentation/v4.x/LegendModifier.html hat einen Abschnitt "Alternativ - LegendModifier.LegendData an SciChartLegend binden". LegendModifier.LegendData ist einfach eine Sammlung von SeriesInfo. SeriesInfo wird im Detail unter http://www.sichart.com/documentation/v4.x/SeriesInfo%20%E2%80%93%20the%20ViewModels%20for%20Tooltips%20and%20Legends.html besprochen. Ich würde vorschlagen, sie zu öffnen eine neue Frage, wenn Sie mehr Details wünschen! –