wpf Area Chart с разными цветами?

Я размышляю о диаграммах набора инструментов MS и не могу понять, как изменить цвет областей. Мне нужно динамически заполнять диаграмму, что означает, что я не знаю заранее, сколько секций будет иметь диаграмма с областями.

Вот код, который у меня есть.

var a = new AreaSeries
{
  Title = "a",
  IndependentValuePath = "Key",
  DependentValuePath = "Value",
  Background = Brushes.Plum
};

Я попытался изменить как передний план, так и задний план, но без кубиков.

mcChart.Series.Add(a);

a = new AreaSeries
{
  Title = "b",
  IndependentValuePath = "Key",
  DependentValuePath = "Value",
  Background = Brushes.Peru
};

mcChart.Series.Add(a);

Заполните диаграмму.

((AreaSeries)mcChart.Series[0]).ItemsSource = new[]
{
  new KeyValuePair<string, int>("1", 100),
  new KeyValuePair<string, int>("2", 180),
  new KeyValuePair<string, int>("3", 110),
  new KeyValuePair<string, int>("4", 95),
  new KeyValuePair<string, int>("5", 40),
  new KeyValuePair<string, int>("6", 95)
};

((AreaSeries)mcChart.Series[1]).ItemsSource = new[]
{
  new KeyValuePair<string, int>("1", 150),
  new KeyValuePair<string, int>("2", 280),
  new KeyValuePair<string, int>("3", 310),
  new KeyValuePair<string, int>("4", 195),
  new KeyValuePair<string, int>("5", 340),
  new KeyValuePair<string, int>("6", 195)
};

Я новичок в wpf и не могу понять, что с этим не так.

Вот XAML

<chartingToolkit:Chart 
  Width="600" Height="450"
  Name="mcChart" 
  Background="LightBlue"
  Foreground="DarkBlue"
  Title="Area Chart">                
</chartingToolkit:Chart>

Как изменить цвет области a и области b. Сейчас они того цвета, который установлен по умолчанию, хотя я установил фон и передний план.

Спасибо.


person nitefrog    schedule 13.01.2011    source источник


Ответы (1)


Вы можете использовать свойство Chart.Palette следующим образом:

<Grid>
    <charting:Chart>
        <charting:Chart.Palette>
            <visualizationToolkit:ResourceDictionaryCollection>
                <ResourceDictionary>
                    <Style x:Key="DataPointStyle" TargetType="Control">
                        <Setter Property="Background" Value="MistyRose"/>
                    </Style>
                </ResourceDictionary>
                <ResourceDictionary>
                    <Style x:Key="DataPointStyle" TargetType="Control">
                        <Setter Property="Background" Value="AliceBlue"/>
                    </Style>
                </ResourceDictionary>
            </visualizationToolkit:ResourceDictionaryCollection>
        </charting:Chart.Palette>
        <charting:AreaSeries Title="Series 1"/>
        <charting:AreaSeries Title="Series 2"/>
    </charting:Chart>
</Grid>
  • Вот дополнительная информация.
person Rick Sladkey    schedule 13.01.2011
comment
Спасибо за ссылку, а как это сделать с помощью кода? Я не буду знать, сколько у меня серий, пока не извлечу данные из базы данных. Я должен делать это динамически. Любые идеи? Еще раз спасибо. - person nitefrog; 13.01.2011
comment
Палитра может быть сколь угодно длинной. То есть количество столбцов не обязательно должно совпадать. Если вам не нужно выбирать цвета во время выполнения, вы можете создать одну палитру в XAML и использовать ее в коде. Если вам действительно нужно изменить цвета в коде, просто создайте его, например `new ResourceDictionaryCollection () 'и т. д. - person Rick Sladkey; 13.01.2011
comment
Я до сих пор не понимаю, какое свойство нужно изменить для изменения фона диаграммы с областями? - person mithun; 25.06.2015