2010-05-31 15 views
1

J'ai une carte StackedBarSeries dans Silverlight 4 (dernière version).Comment créer StackedBarSeries avec une info-bulle personnalisée sans perdre les couleurs standard

J'ai créé un DataPointStyle appelé MyDataPointStyle pour une info-bulle personnalisée. En soi, cela brise la palette standard utilisée pour les différentes barres.

J'ai appliqué une palette personnalisée - comme décrit dans David Anson's blog au graphique. Toutefois, lorsque le jeu DataPointStyle est défini pour mes objets SeriesDefinition, il n'utilise pas cette palette.

Je ne suis pas sûr de ce que je suis absent - mais David dit spécifiquement:

... il permet l'utilisation de DynamicResource (actuellement seulement pris en charge par la plate-forme WPF) pour permettre aux utilisateurs Personnalisez leur DataPointStyle sans perdre par inadvertance les couleurs par défaut Palette. (Note: Une demande très populaire!)

Malheureusement, je suis perdu par inadvertance ces couleurs - et je ne vois pas pourquoi?

<chartingToolkit:Chart.Palette> 
     <dataviz:ResourceDictionaryCollection> 
      <ResourceDictionary> 
       <Style x:Key="DataPointStyle" TargetType="Control"> 
        <Setter Property="Background" Value="Blue"/> 
       </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="Red"/> 
       </Style> 
      </ResourceDictionary> 
     </dataviz:ResourceDictionaryCollection> 
    </chartingToolkit:Chart.Palette> 

    <chartingToolkit:Chart.Series> 

     <chartingToolkit:StackedBarSeries> 

      <chartingToolkit:SeriesDefinition 
         IndependentValueBinding="{Binding SKU}" 
         DependentValueBinding="{Binding Qty}" 
         DataPointStyle="{StaticResource MyDataPointStyle}" 
         Title="Regular"/> 

      <chartingToolkit:SeriesDefinition 
         IndependentValueBinding="{Binding SKU}" 
         DependentValueBinding="{Binding Qty}" 
         DataPointStyle="{StaticResource MyDataPointStyle}" 
         Title="FSP Orders"/> 

      <chartingToolkit:StackedBarSeries.IndependentAxis> 
       <chartingToolkit:CategoryAxis Title="SKU" Orientation="Y" FontStyle="Italic" AxisLabelStyle="{StaticResource LeftAxisStyle}"/> 
      </chartingToolkit:StackedBarSeries.IndependentAxis> 

       <chartingToolkit:StackedBarSeries.DependentAxis> 
       <chartingToolkit:LinearAxis Orientation="X" ExtendRangeToOrigin="True" Minimum="0" ShowGridLines="True" /> 
      </chartingToolkit:StackedBarSeries.DependentAxis> 

     </chartingToolkit:StackedBarSeries > 
    </chartingToolkit:Chart.Series> 

</chartingToolkit:Chart> 

Répondre

4

L'indice est dans la citation que vous avez publié de David « actuellement uniquement par la plate-forme WPF » qui est, ce ne est pas pris en charge sur Silverlight.

Dès que vous fournissez votre propre DataPointStyle, vous remplacez tout style qui aurait été fourni par la Palette (celle par défaut ou votre palette personnalisée).

Modifier:

Voici comment son fait. Au lieu de fournir un style à la propriété DataPointStyle d'une série ou d'une définition, vous le laissez à la palette. Toutefois, les styles de la palette peuvent utiliser la propriété BasedOn de l'objet Style pour éviter la duplication. Alors: -

<UserControl.Resources> 
    <Style x:Key="MyDataPointStyle" TargetType="DataPoint"> 
    <!-- Set up the general style for the points may even include a Template --> 
    </Style> 

...

<chartingToolkit:Chart.Palette>  
    <dataviz:ResourceDictionaryCollection>  
     <ResourceDictionary>  
      <Style x:Key="DataPointStyle" TargetType="chartingToolkit:BarDataPoint" BasedOn="{StaticResource MyDataPointStyle}" >  
       <Setter Property="Background" Value="Blue"/>  
      </Style>  
     </ResourceDictionary>  
     <ResourceDictionary>  
      <Style x:Key="DataPointStyle" TargetType="chartingToolkit:BarDataPoint" BasedOn="{StaticResource MyDataPointStyle}">  
       <Setter Property="Background" Value="Green"/>  
      </Style>  
     </ResourceDictionary>  
     <ResourceDictionary>  
      <Style x:Key="DataPointStyle" TargetType="chartingToolkit:BarDataPoint" BasedOn="{StaticResource MyDataPointStyle}">  
       <Setter Property="Background" Value="Red"/>  
      </Style> 
     </ResourceDictionary>   
    </dataviz:ResourceDictionaryCollection>   
</chartingToolkit:Chart.Palette>   

<chartingToolkit:Chart.Series>   

    <chartingToolkit:StackedBarSeries>   

     <chartingToolkit:SeriesDefinition   
        IndependentValueBinding="{Binding SKU}"   
        DependentValueBinding="{Binding Qty}"   
        Title="Regular"/> 

...

+0

je avais lu que 'jusqu'à présent' (trois fois je lis cette phrase). hmm je suppose que cela l'expliquerait. Je suis toujours confus comment je peux appliquer la palette personnalisée dans le style? la structure 'Palette' ci-dessus est définie sur la propriété 'Palette' de Chart mais il n'y a pas de membre 'Palette' sur un BarDataPoint. –

+0

@Simon: Une palette fournit un ensemble de __styles__. Les DataPoints de chaque série reçoivent un style de la "palette". La propriété 'Palette' manquante que vous recherchez est donc la propriété' Style'. Si vous fournissez votre propre valeur pour le DataPointStyle, cela remplace tout ce qui est fourni par la palette. – AnthonyWJones

+0

donc si je veux 3 couleurs différentes dans mon tableau dois-je fournir une palette avec les points de données dupliqué dans son intégralité 3 fois - chacun avec une couleur différente? –