2010-06-09 6 views
2

J'ai une série de points que je vais transformer en une ligne sur un graphique. Ce que je veux, c'est donner à la zone sous le graphique un remplissage en dégradé. Cela ressemblerait un peu à un graphique Bloomberg comme celui-ci;Graphique en ligne Silverlight avec dégradé

Example Graph

Ma question a vraiment trois parties; D'abord, comment dois-je remplir seulement la zone sous le graphique?

  • Deuxièmement, comment est-ce que je remplis cela avec un dégradé?
  • Enfin, si j'ai plusieurs lignes sur le même graphique, toute zone de plus d'une ligne devrait avoir un dégradé de gris, comment l'établiriez-vous? Mon plus gros problème est de décider des structures de données à utiliser, je pourrais utiliser beaucoup de formes à côtés multiples (une pour chaque série de lignes/données) puis dire à la brosse de dessiner;

    • transparent si elle est en aucune forme
    • La couleur d'une série si elle est en une forme (alpha par rapport à la hauteur pour donner grad)
    • Noir si elle est dans de multiples formes (alpha par rapport à la hauteur de donne grad)

    Ensuite, je dessinerais les limites des formes en blanc après.

    Merci,

    Gav

  • Répondre

    6

    L'effet de dégradé est possible en utilisant la version gratuite de Visiblox Silverlight Charts. Voir l'exemple d'application 'Hindsight' pour voir comment les graphiques Visiblox peuvent être appliqués à une application de ce contexte.

    J'ai joint un extrait de code brut du XAML sur la façon de parvenir à cet effet:

    <UserControl x:Class="SilverlightApplication1.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:v="clr-namespace:Visiblox.Charts;assembly=Visiblox.Charts"> 
    
    <UserControl.Resources> 
        <LinearGradientBrush x:Key="GradientBrush" StartPoint="1.0, 0.0" EndPoint="1.0, 1.0"> 
         <GradientStop Color="AliceBlue" Offset="0.3" /> 
         <GradientStop Color="DarkBlue" Offset="0.7" /> 
        </LinearGradientBrush> 
    </UserControl.Resources> 
    
    <Grid x:Name="LayoutRoot" Background="White"> 
        <v:Chart x:Name="Chart"> 
         <v:Chart.Series> 
          <v:LineSeries x:Name="Series" ShowArea="True" AreaFill="{StaticResource GradientBrush}"/> 
         </v:Chart.Series> 
        </v:Chart> 
    </Grid> 
    

    Personnellement, je prendrais l'action que Hindsight fait, la suppression de la zone sous les lignes lorsque il y a plusieurs séries sur la zone de la parcelle. Je pense qu'à ce stade, les gradients entravent les données, et comme vous l'avez mentionné plus haut, faire quelque chose à ce sujet entraîne un coût de calcul. Cela pourrait également conduire à des interprétations erronées des données, alors méfiez-vous.

    En termes d'obtention de vos données dans le graphique, vous pouvez utiliser la BiblableDataSeries Visiblox pour lier vos objets métier directement sur le graphique. :)

    Divulgation: J'ai déjà travaillé en tant que développeur sur Visiblox Charts.

    Espérons que cela aide!

    +0

    Un grand merci! – gav

    Questions connexes