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

重新加载调用 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 回答