2010-02-05 9 views
5

Vorrei rimuovere i marcatori del datapoint da un LineSeries nel mio grafico Silverlight. L'unico modo che ho trovato sul Web è impostare VisibilityProperty su Collapse.Rimozione (compressione) di DataPoints in un LineSeries?

// non funziona nell'attuale versione del toolkit SL var collapseDataPointSetter = new Setter (Control.VisibilityProperty, Visibility.Collapsed);

Ma questo non funziona per la versione corrente del toolkit SL. Come posso rimuovere o nascondere i marcatori DataPoint nella versione corrente?

risposta

10

Pantarhei,

Utilizzare i seguenti stili di grafico (con i modelli di riferimento) per nascondere i punti di dati. Ho incluso gli stili sia per LineSeries che per AreaSeries.

Buona fortuna, Jim

<ControlTemplate x:Key="CommonAreaSeriesDataPointTemplate" TargetType="charting:AreaDataPoint"> 
    <!--Comment out data points from the default template; just an empty template--> 
    <Grid x:Name="Root" Opacity="1"> 
     <!--<ToolTipService.ToolTip> 
      <StackPanel Margin="2,2,2,2"> 
       <ContentControl Content="{TemplateBinding FormattedDependentValue}" /> 
       <ContentControl Content="{TemplateBinding FormattedIndependentValue}" /> 
      </StackPanel> 
     </ToolTipService.ToolTip> 
     <Ellipse StrokeThickness="{TemplateBinding BorderThickness}" Stroke="{TemplateBinding BorderBrush}" Fill="{TemplateBinding Background}" />--> 
    </Grid> 
</ControlTemplate> 
<Style x:Key="CommonAreaSeriesDataPoint" TargetType="charting:AreaDataPoint"> 
    <Setter Property="Background" Value="{StaticResource CommonAreaSeriesBackground}" /> 
    <Setter Property="Template" Value="{StaticResource CommonAreaSeriesDataPointTemplate}" /> 
</Style> 
<Style x:Key="CommonAreaSeriesPath" TargetType="Path"> 
    <Setter Property="StrokeThickness" Value="1" /> 
    <Setter Property="Stroke" Value="DarkGray" /> 
    <Setter Property="Effect" Value="{StaticResource DialogDropShadow}" /> 
</Style> 
<ControlTemplate x:Key="CommonLineSeriesDataPointTemplate" TargetType="charting:LineDataPoint"> 
    <!--Comment out data points from the default template; just an empty template--> 
    <Grid x:Name="Root" Opacity="1"> 
     <!--<ToolTipService.ToolTip> 
      <StackPanel Margin="2,2,2,2"> 
       <ContentControl Content="{TemplateBinding FormattedDependentValue}" /> 
       <ContentControl Content="{TemplateBinding FormattedIndependentValue}" />--> 
     <!--Example of how to access the bound business object--> 
     <!--<ContentControl Content="{Binding Amount}" DataContext="{TemplateBinding DataContext}" />--> 
     <!--</StackPanel> 
     </ToolTipService.ToolTip>--> 
     <!--<Ellipse StrokeThickness="{TemplateBinding BorderThickness}" Stroke="{TemplateBinding BorderBrush}" Fill="{TemplateBinding Background}" />--> 
    </Grid> 
</ControlTemplate> 
<Style x:Key="CommonLineSeriesDataPoint" TargetType="charting:LineDataPoint"> 
    <Setter Property="IndependentValueStringFormat" Value="{}{0:yyyy}" /> 
    <Setter Property="DependentValueStringFormat" Value="{}{0:c0}" /> 
    <Setter Property="Background" Value="#FF0077CC" /> 
    <Setter Property="BorderBrush" Value="White" /> 
    <Setter Property="BorderThickness" Value="2" /> 
    <Setter Property="IsTabStop" Value="False" /> 
    <Setter Property="Template" Value="{StaticResource CommonLineSeriesDataPointTemplate}" /> 
</Style> 
<Style x:Key="CommonLineSeriesPolyline" TargetType="Polyline"> 
    <Setter Property="StrokeThickness" Value="5" /> 
    <Setter Property="Effect" Value="{StaticResource DialogDropShadow}" /> 
</Style> 
<!-- Implicit non-Key'd Styles BasedOn Common Explicit Key'd Styles above --> 
<Style TargetType="charting:AreaSeries"> 
    <Setter Property="DataPointStyle" Value="{StaticResource CommonAreaSeriesDataPoint}" /> 
    <Setter Property="PathStyle" Value="{StaticResource CommonAreaSeriesPath}" /> 
</Style> 
<Style TargetType="charting:LineSeries"> 
    <Setter Property="DataPointStyle" Value="{StaticResource CommonLineSeriesDataPoint}" /> 
    <Setter Property="PolylineStyle" Value="{StaticResource CommonLineSeriesPolyline}" /> 
</Style> 
+0

Grazie. Lo proverò Ma sembra essere quello che sto cercando. – pantarhei

+0

Funziona come un fascino anche in WPF ... Grazie mille. – sprite

+0

Molte grazie @Jim per il codice sopra. Tuttavia, una cosa che mi manca in questo approccio è che il colore della linea in LineSeries si risolve nel valore Sfondo impostato nello stile LineDataPoint per tutte le serie in un grafico. Anche la rimozione dello sfondo setter non aiuta, è solo un diverso colore di correzione. C'è un modo per i colori della linea di essere automaticamente diversi per le diverse serie di linee con l'approccio sopra? –

1
<charting:LineSeries.DataPointStyle> 
          <Style TargetType="charting:LineDataPoint"> 
           <Setter Property="Visibility" Value="Collapsed"/> 
           <Setter Property="Background" Value="violet"/> 
           <Setter Property="Opacity" Value="0" /> 
          </Style> 
         </charting:LineSeries.DataPointStyle> 

+0

Mi ha funzionato perfettamente. – vijaykumar

4

Farlo con stili a mio parere non è l'approccio migliore perché avete ancora una quantità enorme di immagini quando si hanno anche un sacco di punti come in un grafico azionario.

public class LineSeriesEx : LineSeries 
{ 
    protected override DataPoint CreateDataPoint() 
    { 
     return new EmptyDataPoint(); 
    } 
} 

public class EmptyDataPoint : DataPoint 
{ 
    // As the method name says, this DataPoint is empty. 
} 

Facendolo in questo modo hai quasi cinque volte meno Visual rispetto a quando hai appena impostato un po 'di stile.

+0

Questa è una soluzione semplice rispetto al contatto con XAML. – Sid

3

Ho usato la soluzione di Jim (grazie molte, molto aiuto lì) e l'ho applicato al modello di grafico predefinito.

Nell'area della tavolozza è disponibile il dizionario delle risorse per ogni riga della serie.

Ecco come ho avuto modo di sbarazzarsi di esso utilizzando il modello di controllo di Jim, e posso metterlo in ogni ResourceDictonary così non devo farlo riga per riga

<toolkit:ResourceDictionaryCollection> 
<ResourceDictionary> 
<!-- I wanted a solid color brush so I just went ahead and defined it in the palette--> 
<SolidColorBrush x:Key="Background" Color="Green"/> 
<Style x:Key="DataPointStyle" TargetType="Control"> 
<Setter Property="Background" Value="{StaticResource Background}"/> 
<!-- below is where I entered Jim's control template into the default palette defined--> 
<Setter Property="Template"> 
<ControlTemplate TargetType="charting:LineDataPoint"> 
<Grid x:Name="Root" Opacity="1"/> 
</ControlTemplate> 
</Setter.Value> 
</Setter> 
</Style> 
</ResourceDictionary> 
</toolkit:ResourceDictionaryCollection> 

Questo ha funzionato per almeno me, e mi farà risparmiare un sacco di tempo (e mi ha già salvato un sacco di capelli prima di estrarlo)