J'ai trouvé la solution, après beaucoup de jurons et d'enquête. Il y a beaucoup de pièces mobiles ici, donc je vais les garder aussi brèves que possible tout en transmettant les points principaux.
Pour commencer j'ai une collection d'objets que je suis en train de suivre:
public class PileOfFruit
{
public string Name {get; set; }
public int Count { get; set; }
}
Dans mon modèle de vue, j'ai une collection de ces objets. À mon avis, je vais définir le camembert qui affichera les quantites des fruits dans le panier. Le facteur le plus important est le modèle ici se liant à 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>
maintenant dans app.xaml ou un autre endroit où nous pouvons déposer dans le modèle de l'objet PieDataSeries. Portez une attention particulière à la valeur sur Remplissez Il est lié à la valeur indépendante qui sera quelque chose comme «banane» «raisin» ou autre. Celui-ci est transmis à un convertisseur de valeur.
<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}">
....
Le convertisseur de données associé est ce qui va finalement définir la couleur que nous désirons. Donc, si nous faisons quelque chose comme ça ...
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;
......
Et c'est ainsi que vous obtenez les bonnes couleurs à chaque fois. Si j'ai oublié quelque chose ou si je devrais clarifier, s'il vous plaît faites le moi savoir afin que je puisse apporter des corrections. Il y a beaucoup de pièces mobiles ici .. = P
Re: espaces de noms. Il suffit d'utiliser xmlns: toolkit = "http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" ayant tous ces différents alias est donc SL3 – AnthonyWJones
J'ai essayé cette approche, mais si le graphique est rechargé pour Pour une raison quelconque, l'ordre des couleurs ne commence pas à # 1, car ils sont sélectionnés dans un "round robin fashion". –