2016-05-11 12 views
1

私は階層的にグループ分けされたデータセリフを持っています。私は自然にそのすべての子の軸をオフにする必要がありグループをオフSciChart - 軸の凡例に階層リストを表示

enter image description here

(スクリーンショットを参照)、この構造を反映するために、グラフの凡例を必要としています。 組み込み軸の凡例でこれを行うことはできますか?もしそうなら、あなたはどのようにポインタを提供することができますか? (現時点で私には最も賢明な考えがないので) もしそうでなければ、最良の回避策は何でしょうか?凡例を無効にし、カスタムコントロールを実装してから、SeriesSourceのバウンドプロパティを動的に変更しますか?

答えて

0

SciChartLegendコントロールはItemsControlで、LegendModifier.LegendDataプロパティを使用してSeriesInfoのObservableCollectionにバインドしてデータを表示するだけです。

英語では、ItemsControlに階層グループを表示する方法を理解できれば、SciChart Legendコントロールで同じことができます。

ItemsControlから継承した独自のクラスを作成してLegendModifier.LegendDataにバインドし、必要に応じてアイテムをグループ化する必要があります。または、添付のビヘイビアまたはコンバーターを使用してアイテムをグループ化します。

次に、LegendModifier Documentationのテクニックを使用して独自のクラスまたはItemsControl(SciChartLegendではなく)を使用できます。あなたが代わりにSciChartLegendにLegendModifier.LegendDataを結合して、アプリケーションのどこにでも置くことができます

SciChartLegendするLegendModifier.LegendDataバインディング - 代わり

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

このようなものは、完全なソリューションではありませんが、それはItemsControlのテンプレート凡例項目を置換するSciChart伝説APIを使用する方法をお見せません。それで、項目をグループ化し、階層的な方法でデータを表示することができるはずです。

+0

こんにちは、私はあなたの助言に従おうとしましたが、真実は私がそれをかなり理解していないと言われます。正直言って、私はあなたが2つか3つの代替解決策を提案しているかどうかも分かりません。 カスタム構造を表示するカスタムLegendModifier.LegendTemplateを作成しようとしました。私はグループのテンプレートのために、グループのコンテンツのためのItemsControlを含んでいます。このItemsControlには別のカスタムテンプレートがあります。その結果、伝説は全く示されていませんでした。 残念ながら、私の限られたWPF知識では、私が間違っていたアイデアを持つために私にはあまりにも多くの不明点があります。 – Shaggydog

+0

私はあなたの答えのこの部分に集中したいと思います: "あなたがする必要があるかもしれないことは、ItemsControlを継承し、LegendModifier.LegendDataにバインドし、あなたが望むように項目をグループ化する独自のクラスを作成することです。 これは、凡例変更をそのままにして、グループ化を個別に処理するカスタムのItemsControl実装を作成することができますか?私の質問は、SciChartにSciChartの伝説の代わりにこのカスタムコントロールを使用させるにはどうしたらいいですか? – Shaggydog

+0

はい、正確です。 SciChartLegendは単なるItemControlで、それを箱から出して作るためにテンプレート化されています。 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で詳しく説明しています。あなたが詳細を望むならば新しい質問! –

関連する問題