C# Silverlight工具包;饼图颜色
我有一个巨大的问题,我无法解决。假设我有五种不同的水果,我希望它们中的每一种都有特定的颜色。假设我有三个“篮子”,其中包含零个或更多的水果 当我为我的三个篮子制作饼图时,每个楔子都是一些随机的颜色,可能是由控件选择的。我怎么说,让蓝莓变成蓝色,班纳纳斯变成黄色,等等 我知道这是一个奇怪的问题,但我想不出更简单的方式来描述它C# Silverlight工具包;饼图颜色,c#,silverlight,silverlight-4.0,silverlight-toolkit,pie-chart,C#,Silverlight,Silverlight 4.0,Silverlight Toolkit,Pie Chart,我有一个巨大的问题,我无法解决。假设我有五种不同的水果,我希望它们中的每一种都有特定的颜色。假设我有三个“篮子”,其中包含零个或更多的水果 当我为我的三个篮子制作饼图时,每个楔子都是一些随机的颜色,可能是由控件选择的。我怎么说,让蓝莓变成蓝色,班纳纳斯变成黄色,等等 我知道这是一个奇怪的问题,但我想不出更简单的方式来描述它 我不在乎解决方案是用XAML还是用代码,只要它有效。您可以为图表定义自己的调色板,但它会自动选择调色板中显示的数据项的颜色。因此,没有(简单的?)方法告诉图表显示蓝莓蓝色、班
我不在乎解决方案是用XAML还是用代码,只要它有效。您可以为图表定义自己的调色板,但它会自动选择调色板中显示的数据项的颜色。因此,没有(简单的?)方法告诉图表显示蓝莓蓝色、班纳纳斯黄色等。您可以做的是告诉图表显示第一项蓝色、第二项黄色等,并将蓝莓第一、班纳纳斯第二等放在数据源中 一些用于定义您自己的paletta的示例:
<chartingToolkit:Chart x:Name="ExampleChart">
<chartingToolkit:PieSeries>
<chartingToolkit:PieSeries.ItemsSource >
<toolkit:ObjectCollection>
<sys:Double>1</sys:Double>
<sys:Double>2.3</sys:Double>
<sys:Double>3.5</sys:Double>
<sys:Double>5</sys:Double>
</toolkit:ObjectCollection>
</chartingToolkit:PieSeries.ItemsSource >
<chartingToolkit:PieSeries.Palette>
<visualizationToolkit:ResourceDictionaryCollection>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="Control">
<Setter Property="Background" Value="Red"/>
</Style>
</ResourceDictionary>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="Control">
<Setter Property="Background" Value="Green"/>
</Style>
</ResourceDictionary>
<ResourceDictionary>
<Style x:Key="DataPointStyle" TargetType="Control">
<Setter Property="Background" Value="Blue"/>
</Style>
</ResourceDictionary>
</visualizationToolkit:ResourceDictionaryCollection>
</chartingToolkit:PieSeries.Palette>
</chartingToolkit:PieSeries >
</chartingToolkit:Chart >
经过多次咒骂和调查,我找到了解决办法。这里有很多活动部分,所以我将尽可能简短地介绍每一部分,同时仍要传达要点 首先,我有一个我试图跟踪的对象集合:
public class PileOfFruit
{
public string Name {get; set; }
public int Count { get; set; }
}
在我的视图模型中,我有这些对象的集合
public class BasketVM
{
...
private ObservableCollection<PileOfFruit> _FruitBasket = new ObservableCollection<PileOfFruit>();
public ObservableCollection<PileOfFruit> FruitBasket
{
get { return _FruitBasket; }
}
...
}
这就是你每次都能得到正确颜色的方法。如果我遗漏了什么或需要澄清,请让我知道,以便我可以进行更正。这里有很多活动部件=以下是我的发现:
颜色并不是随机的:有一系列的托盘,每5次重复一次(数量其实并不重要)。我的解决方法更简单:每次有新数据要显示时,我都会重新创建图表。这样,颜色托盘将始终从相同的颜色开始(意味着它永远不会改变)。这意味着您需要有一个通过编程重新构建PieChart的方法(在XAML中没有它,只需要有一个占位符并调用“PieChartBuilder”方法)。
我认为这是更少的代码(也更少的bug:)。Re:namespace。只需使用xmlns:toolkit=“”使用所有这些不同的别名是非常困难的,因此我尝试了这种方法,但如果由于某种原因重新加载图表,颜色的顺序不会从#1开始,因为它们是以“循环方式”选择的。您仍然无法控制颜色。每次数据发生变化时仅仅制作一张新图表是一种愚蠢的做法。此外,如果有多个饼图,您的方法将再次失败。此外,如果图表中项目的顺序/数量不同。我可以继续说下去。
public class BasketVM
{
...
private ObservableCollection<PileOfFruit> _FruitBasket = new ObservableCollection<PileOfFruit>();
public ObservableCollection<PileOfFruit> FruitBasket
{
get { return _FruitBasket; }
}
...
}
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;
......