我正在使用WPF工具包绘制简单的折线图。我的目标是通过数据绑定设置我的系列的线条颜色。这只能成功部分。问题是:为什么?
设置
命名空间:
xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" x:Class="WpfApplication3.MainWindow"
xmlns:media="clr-namespace:System.Windows.Media;assembly=PresentationCore"
图表:
<chartingToolkit:Chart x:Name="chart">
<chartingToolkit:LineSeries x:Name="seriesEntries" IndependentValueBinding="{Binding Key}" DependentValueBinding="{Binding Value}" DataPointStyle="{StaticResource CommonLineSeriesDataPoint}">
<chartingToolkit:LineSeries.Tag>
<media:Brush>Green</media:Brush>
</chartingToolkit:LineSeries.Tag>
</chartingToolkit:LineSeries>
</chartingToolkit:Chart>
暂时忽略Tag
,稍后会相关。
请注意,图表具有自定义数据点样式CommonLineSeriesDataPoint
:
<Style x:Key="CommonLineSeriesDataPoint" TargetType="chartingToolkit:LineDataPoint">
<Setter Property="Background">
<Setter.Value>
<media:Brush>Red</media:Brush>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="chartingToolkit:LineSeries">
<Setter Property="DataPointStyle" Value="{StaticResource CommonLineSeriesDataPoint}" />
</Style>
正如预期的那样,这会为我的系列红色:
着色
突破变化
现在我想数据绑定我的数据点背景。我只做了一次改变。我没有直接指定背景画笔,而是将其绑定到我的Tag
的{{1}}属性,这也是一个画笔(参见上一个LineSeries
声明,它是绿色一)。
LineSeries
结果如下:
所以点是绿色的。 但是这条线已经消失了。
我的期望是看到一条绿线!它在哪里?
答案 0 :(得分:0)
我在挖掘WPF工具包源代码后找到了解决方案。
通过Stroke
将Polyline
系列的Background
属性绑定到TemplateBinding
属性。我怀疑这与我绑定Background
属性本身的尝试不相符。
TemplateBinding
。因此,让我们摆脱TemplateBinding并将Stroke
属性直接绑定到Tag
的{{1}}(请记住:LineSeries
包含绿色刷)。
从WPF工具包源 \ Source \ DataVisualization \ Themes \ generic.xaml 我复制了Tag
的部分样式定义并将其添加到我的LineSeries
:
ResourceDictionary
(如果有兴趣,您可以在 generic.xaml 中搜索<Style x:Key="CommonLineSeries" TargetType="chartingToolkit:LineSeries" BasedOn="{StaticResource {x:Type chartingToolkit:LineSeries}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="chartingToolkit:LineSeries">
<Canvas x:Name="PlotArea">
<Polyline Points="{TemplateBinding Points}" Stroke="{Binding Tag, RelativeSource={RelativeSource AncestorType={x:Type chartingToolkit:LineSeries}}}" Style="{TemplateBinding PolylineStyle}"/>
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
,以查找我从中复制的来源。)
我修改的唯一内容是<!-- charting:LineSeries -->
的绑定。在这里,我使用与数据点相同的绑定。
最后要做的事情:告诉Stroke
使用这种风格:
LineSeries
瞧,它有效。线路又回来了,它是绿色的:
(如果你仔细观察,你会看到该系列的图例条目仍然有错误的颜色。但我认为解决方案与上面的相似。)