2013-05-06 4 views
0

Я использую Silverlight Toolkit от http://silverlight.codeplex.com/, и у меня проблема со стилем. Основываясь на документах Microsoft, я вижу, что диаграмма состоит из 4 основных компонентов.Как нарисовать диаграмму, чтобы опустить лишнюю область диаграммы вокруг диаграммы

  1. ChartAreaStyle ==> Сетка
  2. LegendStyle ==> Легенда (управления похож на ItemsControl с названием)
  3. PlotAreaStyle ==> Сетка
  4. TitleStyle ==> Название (а ContentControl)

исх http://msdn.microsoft.com/en-us/expression/dd433476.aspx

Мой вопрос

Как заполнить контейнер диаграммы самой диаграммой вместо пустой области и, если возможно, опустить легенду?

Я все еще пытаюсь обернуть голову вокруг xaml и управлять шаблонами и т. Д. Я знаю, что, возможно, это можно сделать, используя это, я просто не знаю, как это сделать.

Вот пример того, что я пытаюсь достичь:

Courtesy of Telerik's awesome controls

Вот что он выглядит сейчас:

Horrible

+0

Что именно неправильно со вторым изображением ? Какова цель индикаторов прогресса и площади? – vorrtex

+0

@vorrtex На втором рисунке показано, как диаграмма, расположенная в третьей строке родительской сетки, не визуализирует себя правильно. Как вы можете видеть, окружающая синяя область занимает все пространство, в то время как фактическая диаграмма сама по себе является тонкой крошечной линией посередине. Я хочу компактную версию, как в первом изображении, который я разместил. Индикаторы выполнения не имеют отношения к сетке. Они имеют другое применение для моего приложения. Я создаю приложение для отслеживания определенной статистики прогрессирования. – Adrian

ответ

1

Так что я скопировал стиль элемента управления Chart из исходного кода Toolkit и удаленные избыточные элементы из шаблона.

Silverlight line chart

Определение стилей выглядеть так:

<UserControl.Resources> 
    <Style x:Key="ChartWithoutPaddings" TargetType="chart:Chart"> 
     <Setter Property="Padding" Value="0" /> 
     <Setter Property="BorderThickness" Value="0" /> 
     <Setter Property="ChartAreaStyle"> 
      <Setter.Value> 
       <Style TargetType="Panel"> 
        <Setter Property="MinWidth" Value="100" /> 
        <Setter Property="MinHeight" Value="20" /> 
       </Style> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="chart:Chart"> 
        <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"> 
         <chartingprimitives:EdgePanel x:Name="ChartArea" Style="{TemplateBinding ChartAreaStyle}"> 
          <Grid Canvas.ZIndex="-1" Style="{TemplateBinding PlotAreaStyle}" /> 
         </chartingprimitives:EdgePanel> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style x:Key="EmptyDataPoint" TargetType="Control"> 
     <Setter Property="Background" Value="Black" /> 
     <Setter Property="Template" Value="{x:Null}" /> 
    </Style> 

    <Style x:Key="OnePixelLine" TargetType="Polyline"> 
     <Setter Property="StrokeThickness" Value="1" /> 
    </Style> 
</UserControl.Resources> 

Вы должны также скрыть ось и указать ширину и высоту графика:

<chart:Chart Style="{StaticResource ChartWithoutPaddings}" 
      VerticalAlignment="Center" HorizontalAlignment="Center" 
      Width="200" Height="30"> 
    <chart:LineSeries ItemsSource="{Binding Items}" IndependentValuePath="Title" DependentValuePath="Value" 
         DataPointStyle="{StaticResource EmptyDataPoint}" PolylineStyle="{StaticResource OnePixelLine}" /> 

    <chart:Chart.Axes> 
     <chart:CategoryAxis Orientation="X" Height="0" Opacity="0" /> 
     <chart:LinearAxis Orientation="Y" Width="0" Opacity="0" /> 
    </chart:Chart.Axes> 
</chart:Chart> 
+0

Могу ли я спросить, где именно следует импортировать from? Я пытаюсь добавить пространство имен, найденное через google "xmlns: chartingprimitives =" clr-namespace: System.Windows.Controls.DataVisualization.Charting.Primitives; assembly = System.Windows.Controls.DataVisualization.Toolkit "", но он не находит dll – Adrian

+0

@Adrian Здесь: 'xmlns: datavis =" clr-namespace: System.Windows.Controls.DataVisualization; assembly = System.Windows.Controls.DataVisualization.Toolkit " xmlns: chartingprimitives =" clr-namespace: System.Windows .Controls.DataVisualization.Charting.Примитивы: сборка = System.Windows.Controls.DataVisualization.Toolkit ". Также добавьте требуемую сборку в ссылки на проект. – vorrtex

+0

Это именно то, что у меня есть в моем проекте. Кажется, у других людей тоже есть эта проблема. мой набор инструментов silverlight через NuGet, поэтому он должен иметь все необходимые DLL в моем проекте. Я просеял через папку проекта в каталоге NuGet и вообще не нашел этот .dll. Я нашел код для этого онлайн, однако я просто собираюсь создать новый класс с тем же кодом. У меня нет времени для поиска этого файла. – Adrian