4

常にデータを取得しているグラフがあり、現時点ではリフレッシュ レートが 2 分に設定されています。問題は、チャートが更新されるたびに、色がサイクルの次のものに変わることです。リフレッシュ時にグラフを完全にリセットして、常にパレットの色を毎回 0 または 1 から開始できるのではないかと考えましたが、今のところうまくいきません。何か案は?

アップデート

より良いアイデアのためのいくつかの XAML/コード。

DynamicSeriesChart ヘッドの XAML

    <ana:DynamicSeriesChart SeriesSource="{Binding ChartSeries}" Title="{Binding ChartTitle}" Palette="{StaticResource ChartPalette}" Grid.Row="1" LegendTitle="Legend" Margin="0,25,0,0" Visibility="{Binding ShowGraph, Converter={StaticResource BoolToVisConv}}">

グラフ テンプレートの XAML

        <ana:DynamicSeriesChart.Template>
            <ControlTemplate TargetType="charting:Chart">
                <Border Background="{DynamicResource ContainerElementContentPanelBgBrush}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>

                        <datavis:Title Content="{TemplateBinding Title}" Style="{TemplateBinding TitleStyle}" />

                        <chartingprimitives:EdgePanel x:Name="ChartArea" Grid.Row="1" Margin="0,15,0,15" Style="{TemplateBinding ChartAreaStyle}">
                            <Grid Canvas.ZIndex="-1" Style="{TemplateBinding PlotAreaStyle}" />
                            <Border Canvas.ZIndex="10" BorderBrush="#FF919191" BorderThickness="1" />
                        </chartingprimitives:EdgePanel>

                        <datavis:Legend x:Name="Legend" Style="{TemplateBinding LegendStyle}" Grid.Row="2" HorizontalAlignment="Left">
                            <datavis:Legend.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <WrapPanel Orientation="Horizontal"/>
                                </ItemsPanelTemplate>
                            </datavis:Legend.ItemsPanel>
                        </datavis:Legend>
                    </Grid>
                </Border>
            </ControlTemplate>
        </ana:DynamicSeriesChart.Template>

パレットからのサンプル

<Style x:Key="ColumnSeries1Style" TargetType="Control">
    <Setter Property="Background" Value="#FFFFA500" />
</Style>
<Style x:Key="ColumnSeries1Style2" TargetType="Shape">
    <Setter Property="Fill" Value="#FFFFA500" />
    <Setter Property="Stroke" Value="#FFFFA500" />
</Style>
...

...

<datavis:ResourceDictionaryCollection x:Key="ChartPalette">
    <ResourceDictionary>
        <Style x:Key="DataPointStyle" BasedOn="{StaticResource ColumnSeries1Style}" TargetType="Control" />
        <Style x:Key="DataShapeStyle" BasedOn="{StaticResource ColumnSeries1Style2}" TargetType="Shape" />
    </ResourceDictionary>
...

リロードは、新しい Params を設定する長いクエリである Refresh() を呼び出します。これは LoadData() に送られ、ApplyResults() に送られ、ChartSeries がクリアされてから新しい値が適用されます。

(私はコード ビハインドまたは cs を作成するのをためらっています。なぜなら、それは私のものではないからです (そして、参照と参照がどこにでもあるので、まだやや混乱しています)。これを解決しようとして新しい部品を発見します. 詳細や操作フローが必要な場合は、それらの部品を探し出すために最善を尽くします.

リフレッシュすると、グラフ (面、棒、縦棒、線のいずれか) がパレットの色を循環します。たとえば、現在赤/青/オレンジの 3 本のバーがあるとします。グラフを更新して新しいデータで更新すると、色が変わり、パレットの次の色に変わります。たとえば、紫/黄/緑です。また、データが更新されるたびに、パレット全体が循環し続けます (したがって、チャートとその凡例が変更されます)。これは、カスタム パレットがなくても発生します。

アップデート

問題を詳しく見てみると、「折れ線」グラフは他のグラフと同じ動作をしていません。したがって、この問題があるのは縦棒/横棒/面グラフのみです。

4

1 に答える 1

1

折れ線グラフが機能しているが、他の線グラフの色が循環している場合は、Paletteプロパティのスタイルを設定して、使用されているグラフのタイプを確認できます。次に、カラーパレット全体を折れ線グラフに適用できますが、他のユーザーにインデックス(データの取得元に追加するもの)を色に変換させることができます。変換プロセスの詳細については、この質問を参照してください。

            <Style TargetType="ana:DynamicSeriesChart">
            <Setter Property="Palette" Value="{StaticResource ChartPalette}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsLineGraph}" Value="False">
                    <Setter Property="Palette">
                        <Setter.Value>
                            <datavis:ResourceDictionaryCollection>
                                <ResourceDictionary>
                                    <Style x:Key="DataPointStyle" TargetType="Control">
                                        <Setter Property="Background" Value="{Binding Path=PointColorIndex, 
                            Converter={StaticResource IndexColorConverter}, 
                            ConverterParameter={StaticResource ChartPalette}}"/>
                                    </Style>
                                    <Style x:Key="DataShapeStyle" TargetType="Shape">
                                        <Setter Property="Fill" Value="{Binding Path=FillColorIndex, 
                            Converter={StaticResource IndexColorConverter}, 
                            ConverterParameter={StaticResource ChartPalette}}"/>
                                        <Setter Property="Stroke" Value="{Binding Path=StrokeColorIndex, 
                            Converter={StaticResource IndexColorConverter}, 
                            ConverterParameter={StaticResource ChartPalette}}"/>
                                    </Style>
                                </ResourceDictionary>
                            </datavis:ResourceDictionaryCollection>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
于 2012-10-12T17:19:40.680 に答える