2011-01-04 24 views
11

Estoy usando chartingToolKit: control de gráfico. Quiero eliminar el espacio en blanco que aparece entre el gráfico y el área de trazado. Adjunta la muestra de WPF y la imagen del área que se eliminará.¿Cómo eliminar el espacio entre el área de gráfico de WPF Toolkit y el área de trazado?

<Window x:Class="WpfApplication2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"> 


<Grid> 
    <chartingToolkit:Chart x:Name="chart" Width="500" Height="300" Margin="0, 0, 0, 0" LegendStyle="{StaticResource LegendStyle}" > 


     <chartingToolkit:AreaSeries ItemsSource="{Binding}" 

            DependentValuePath="Value" 

            IndependentValuePath="Key" 

            Background="Red" 

            > 


     </chartingToolkit:AreaSeries> 

     <chartingToolkit:Chart.Axes> 
      <chartingToolkit:LinearAxis Orientation="X" ShowGridLines="False" Visibility="Hidden"> 

      </chartingToolkit:LinearAxis> 
      <chartingToolkit:LinearAxis Orientation="Y" ShowGridLines="False" Visibility="Hidden"/> 
     </chartingToolkit:Chart.Axes> 

    </chartingToolkit:Chart> 
</Grid> 

El área marcada en la flecha roja se debe quitar alt text

Respuesta

20

Con el fin de lograr esto es necesario para volver a la tabla de plantilla. La plantilla de la carta estándar es la siguiente:

  <ControlTemplate TargetType="charting:Chart"> 
       <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto" /> 
          <RowDefinition Height="*" /> 
         </Grid.RowDefinitions> 

         <datavis:Title Content="{TemplateBinding Title}" Style="{TemplateBinding TitleStyle}" /> 

         <!-- Use a nested Grid to avoid possible clipping behavior resulting from ColumnSpan+Width=Auto --> 
         <Grid Grid.Row="1" Margin="0,15,0,15"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="Auto" /> 
          </Grid.ColumnDefinitions> 

          <datavis:Legend x:Name="Legend" Title="{TemplateBinding LegendTitle}" Style="{TemplateBinding LegendStyle}" Grid.Column="1" /> 
          <chartingprimitives:EdgePanel x:Name="ChartArea" Style="{TemplateBinding ChartAreaStyle}"> 
           <Grid Canvas.ZIndex="-1" Style="{TemplateBinding PlotAreaStyle}" /> 
           <Border Canvas.ZIndex="10" BorderBrush="#FF919191" BorderThickness="1" /> 
          </chartingprimitives:EdgePanel> 
         </Grid> 
        </Grid> 
       </Border> 
      </ControlTemplate> 

Esto detalla la ubicación del área de trazado, título, leyenda, etc ... También incluyó un margen no modificable en todo el área de trazado, por lo que no puede lograr lo que están detrás simplemente por diseñar la tabla. Si lo que desea es un área del gráfico y nada más, puede simplificar la plantilla de gráfico de la siguiente manera:

xmlns:chartingprimitives="clr-namespace:System.Windows.Controls.DataVisualization.Charting.Primitives;assembly=System.Windows.Controls.DataVisualization.Toolkit" 

<Grid> 
    <chartingToolkit:Chart x:Name="chart" Width="500" Height="300" 
         Margin="0, 0, 0, 0" Padding="0"> 
    <chartingToolkit:AreaSeries ItemsSource="{Binding}" 
            DependentValuePath="Value" 
            IndependentValuePath="Key" 
            Background="Red"> 
    </chartingToolkit:AreaSeries> 
    <chartingToolkit:Chart.Axes> 
     <chartingToolkit:LinearAxis Orientation="X" ShowGridLines="False" Height="0"> 
     </chartingToolkit:LinearAxis> 
     <chartingToolkit:LinearAxis Orientation="Y" ShowGridLines="False" Width="0"/> 
    </chartingToolkit:Chart.Axes> 
    <chartingToolkit:Chart.Template> 
     <ControlTemplate TargetType="chartingToolkit:Chart"> 
     <Border Background="{TemplateBinding Background}" 
       BorderBrush="{TemplateBinding BorderBrush}" 
       BorderThickness="{TemplateBinding BorderThickness}" 
       Padding="{TemplateBinding Padding}"> 
      <Grid> 
      <chartingprimitives:EdgePanel x:Name="ChartArea" Style="{TemplateBinding ChartAreaStyle}"> 
       <Grid Canvas.ZIndex="-1" Style="{TemplateBinding PlotAreaStyle}" /> 
       <Border Canvas.ZIndex="10" BorderBrush="#FF919191" BorderThickness="1" /> 
      </chartingprimitives:EdgePanel> 
      </Grid> 
     </Border> 
     </ControlTemplate> 
    </chartingToolkit:Chart.Template> 
    </chartingToolkit:Chart> 
</Grid> 

Esto eliminará el relleno que usted está viendo.

+0

Gracias por el ejemplo. Cuando agrego contenido, funciona pero el gráfico no aparece. ¿Alguna idea de hacer que funcione? –

+0

Ooops ... parece que fui demasiado agresivo al cortar partes de la plantilla. He editado mi respuesta anterior. Tenga en cuenta que el gráfico ahora tiene relleno cero y los ejes tienen anchos/alturas cero. – ColinE

+0

Muchas gracias ... Esto resolvió mi problema –

0

Para darle un poco más de espacio sin volver a diseñar el control, establezca el Margen (como lo hizo) y Relleno del control de gráfico a cero.

Margin="0" Padding="0" 
Cuestiones relacionadas