c# - 银光工具包;饼图颜色

标签 c# silverlight silverlight-4.0 silverlight-toolkit pie-chart

我有一个我无法弄清楚的大问题。假设我有五种不同的水果,我希望每一种都与某种颜色相关联。假设我有三个“篮子”,其中包含零个或多个上述水果。

当我为我的三个篮子制作饼图时,每个楔形只是一些随机颜色,可能是由控件选择的。我怎么说,让图表中的蓝莓变成蓝色、香蕉变成黄色等?

我知道这是一个奇怪的问题,但我想不出更简单的方式来描述它。

我不在乎解决方案是 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/

相关文章:

wcf - 没有从客户端计算机上的 Silverlight 发送 WCF 请求

c# - 计算机崩溃后,我的 Visual Studio 2010 不会加载程序集

c# - Angular 6 向 .NET Core API 发出请求

c# - 如何在 Linq 查询中应用自连接?

Silverlight 使用 MVVM Light 框架在 View 中切换 View

silverlight - Prism 2 SL : Remove View from Region when button clicked

javascript - 将 js 变量或 inout 值传递给 razor

c# - Mono for Android - 支持的架构 - 放弃 x86?

silverlight - 使用 MVVM 定期更新 silverlight View

c# - 如何将 ComboBox 的 SelectedValue 属性绑定(bind)到字符串属性?