我有一个我无法弄清楚的大问题。假设我有五种不同的水果,我希望每一种都与某种颜色相关联。假设我有三个“篮子”,其中包含零个或多个上述水果。
当我为我的三个篮子制作饼图时,每个楔形只是一些随机颜色,可能是由控件选择的。我怎么说,让图表中的蓝莓变成蓝色、香蕉变成黄色等?
我知道这是一个奇怪的问题,但我想不出更简单的方式来描述它。
我不在乎解决方案是 XAML 还是代码,只要它有效即可。
最佳答案
经过多次发誓和调查,我找到了解决方案。这里有很多变化的部分,所以我将在传达要点的同时尽可能保持每个部分的简短。
对于初学者来说,我有一个我试图跟踪的对象集合:
public class PileOfFruit
{
public string Name {get; set; }
public int Count { get; set; }
}
在我的 View 模型中,我有这些对象的集合。
public class BasketVM
{
...
private ObservableCollection<PileOfFruit> _FruitBasket = new ObservableCollection<PileOfFruit>();
public ObservableCollection<PileOfFruit> FruitBasket
{
get { return _FruitBasket; }
}
...
}
在我看来,我将定义饼图来显示篮子中水果的数量。这里最重要的因素是模板绑定(bind)到 SliceTemplate
<chartingToolkit:Chart x:Name="ExampleChart">
<chartingToolkit:PieSeries ItemsSource={Binding FruitBasket
DependentValueBinding="{Binding Count}"
IndependentValueBinding="{Binding Name}">
<chartingToolkit:PieSeries.Palette>
<visualizationToolkit:ResourceDictionaryCollection>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="Control">
<Setter Property="Template" Value="{StaticResource SliceTemplate}"/>
</Style>
现在,在 app.xaml 或其他某个地方,我们可以放入 PieDataSeries 对象的模板。密切注意 Fill 上的值 它绑定(bind)到独立值,如“香蕉”、“葡萄”等。这又传递给值转换器。
<converters:FruitToColorConverter x:Key="FruitToColorConverter"/>
<ControlTemplate x:Key="SliceTemplate" TargetType="chart:PieDataPoint">
<Path Data="{TemplateBinding Geometry}"
Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IndependentValue, Converter={StaticResource FruitToColorConverter}}"
Stroke="{TemplateBinding BorderBrush}">
....
关联的数据转换器最终会设置我们想要的颜色。所以如果我们做这样的事情......
public class FruitToColorConverter : IValueConverter
{
private SolidColorBrush Default = new SolidColorBrush(Colors.Black);
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || (!(value is string))) { return Default; }
switch (value as string)
{
case "Apple":
return new SolidColorBrush(Colors.Red);
case "BlueBerry":
return new SolidColorBrush(Colors.Blue);
default:
return Default;
......
这就是您每次都能获得正确颜色的方法。如果我遗漏了任何内容或需要澄清,请告诉我,以便我进行更正。这里有很多事件部件.. =P
关于c# - 银光工具包;饼图颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7745795/