我有一个不断提取数据的图表,此刻刷新率设置为2分钟。问题是每次图表更新时,颜色都会变为循环中的下一个。我想也许我可以让图表在刷新时完全重置,以便每次都以0或1开始调色板颜色,但到目前为止还没有运气。有任何想法吗?
更新
一些XAML /代码可以提供更好的想法。
XAML for DynamicSeriesChart head
<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>
Palette的样本
<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(),这是一个设置新Params的长查询。这将转到LoadData(),它转到ApplyResults(),它清除ChartSeries然后应用新值。
(我犹豫是否提出了代码隐藏或cs,因为它不是我的(并且仍然有点混淆我,参考和引用无处不在)。我还是比较新的参与其中在这个项目中,当我试图解决这个问题时仍然会发现新的部件。如果需要具体或操作流程,我会尽力去追捕这些部分。)
刷新后,图表(可以是“区域”,“条形图”,“列”或“线条”)将循环显示调色板颜色。例如,假设有3个条形图,目前为红色/蓝色/橙色。刷新后用新数据更新图表,颜色将改变并循环到调色板中的下一个 - 让我们说紫色/黄色/绿色。并且它将在每次刷新数据时继续在整个调色板中循环(并因此更改图表及其图例)。即使没有自定义调色板,也会发生这种情况。
更新
仔细研究这些问题,“线”图与其他图的行为不同。所以只有列/条/区域图表有这个问题。
答案 0 :(得分:1)
如果您的折线图有效,但其他线图有循环颜色,您可以设置Palette属性的样式以检查正在使用的图形类型。然后,您可以将整个调色板应用于折线图,但让其他调色板将索引(您将添加到数据的任何位置)转换为颜色。有关转换过程的详细信息,请参阅this question。
<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>