A.R*_*.R. 4 c# silverlight silverlight-toolkit silverlight-4.0 pie-chart
我有一个我无法弄清楚的巨大问题.假设我有五种不同的水果,我希望它们中的每一种都与某种颜色相关联.假设我有三个"篮子",其中包含零个或多个所述水果.
当我为我的三个篮子制作饼图时,每个楔子只是一些随机颜色,可由控件选择.我怎么说,在图表中做蓝莓蓝,bannanas黄色等?
我知道这是一个奇怪的问题,但我想不出更简单的描述方式.
我不在乎解决方案是在XAML还是代码中,只要它有效.
经过多次咒骂和调查后,我找到了解决方案.这里有很多活动部件,所以我将尽可能简短地保持每个部分,同时仍然传达要点.
对于初学者,我有一组我想要跟踪的对象:
public class PileOfFruit
{
public string Name {get; set; }
public int Count { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的视图模型中,我有一组这些对象.
public class BasketVM
{
...
private ObservableCollection<PileOfFruit> _FruitBasket = new ObservableCollection<PileOfFruit>();
public ObservableCollection<PileOfFruit> FruitBasket
{
get { return _FruitBasket; }
}
...
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我将定义饼图,它将显示篮子中水果的数量.这里最重要的因素是模板绑定到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>
Run Code Online (Sandbox Code Playgroud)
现在在app.xaml或其他地方我们可以放入PieDataSeries对象的模板.密切注意Fill上的值 它与独立值绑定,这将类似于'banana''grape'或其他任何东西.这反过来又传递给值转换器.
<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}">
....
Run Code Online (Sandbox Code Playgroud)
关联的数据转换器将最终设置我们想要的颜色.所以,如果我们做这样的事......
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;
......
Run Code Online (Sandbox Code Playgroud)
这就是你每次都得到正确颜色的方法.如果我遗漏了任何内容或应该澄清,请告诉我,以便我可以进行更正.这里有很多活动部件.. = P.
归档时间: |
|
查看次数: |
5382 次 |
最近记录: |