2013-07-16 5 views
0

Я использую WPF Toolkit (System.Windows.Controls.DataVisualization.Toolkit) для создания простой диаграммы. Для того, чтобы установить свою Y-ось, чтобы начать с нулевого значения, я поставил Chart.Axes свойство так:Точки диаграммы инструмента WPF не могут быть установлены через стиль

<chartingToolkit:Chart Width="800" Height="400" Title="Usage" Style="{StaticResource ChartStyle}"> 
    <chartingToolkit:Chart.Axes> 
     <chartingToolkit:LinearAxis Orientation="Y" Minimum="0" /> 
    </chartingToolkit:Chart.Axes> 

    <chartingToolkit:LineSeries DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding Data}" /> 

</chartingToolkit:Chart> 

Это прекрасно работает. Однако, когда я пытаюсь установить это свойство через Style, intellisense даже не показывает Axes.

<Style x:Key="ChartStyle" TargetType="{x:Type chartingToolkit:Chart}"> 
    <Setter Property="Axes"> 
     <Setter.Value> 
      <chartingToolkit:LinearAxis Orientation="Y" Minimum="0" /> 
     </Setter.Value> 
    </Setter> 
</Style> 

Если я запускаю код, я получаю ArgumentNullException говоря Property не может быть пустым. Это Style.Setter.Property. Я посмотрел в исходный код на Codeplex и нашел Axes свойство:

[SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Setter is public to work around a limitation with the XAML editing tools.")] 
[SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "value", Justification = "Setter is public to work around a limitation with the XAML editing tools.")] 
public Collection<IAxis> Axes 
{ 
    get 
    { 
     return _axes; 
    } 
    set 
    { 
     throw new NotSupportedException(Properties.Resources.Chart_Axes_SetterNotSupported); 
    } 
} 

Он говорит здесь, что сеттер является публичным, но я не могу найти такой публичный метод. Теперь я задаю следующие вопросы:

  1. Как установить свойство с помощью стиля, технически отличного от первого блока кода в этом вопросе?
  2. Есть ли способ установить свойство Axes через стиль?
  3. Должен ли я использовать WPF Toolkit для диаграмм? Есть ли более новый метод «canon» для создания диаграмм, о которых я не знаю?
+0

Вы должны прикрепить стиль к самому linearAxis, так как в стиле диаграммы нет доступа. –

ответ

2

вы близки :)

Вы должны прикрепить стиль к самому LinearAxis, так как есть не аксесс от стиля диаграммы.

Стиль идет как это:

<Style x:Key="linearAxisStyle" TargetType="{x:Type charting:LinearAxis}"> 
     <Setter Property="Orientation" Value="Y" /> 
     <Setter Property="Minimum" Value="0" /> 
</Style> 

Связывание выглядит следующим образом:

<chartingToolkit:Chart Width="800" Height="400" Title="Usage" Style="{StaticResource ChartStyle}"> 
<chartingToolkit:Chart.Axes>  
    <chartingToolkit:LinearAxis Style="{StaticResource linearAxisStyle}" /> 
<chartingToolkit:Chart.Axes/> 

<chartingToolkit:LineSeries DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding Data}" /> 

+0

Таким образом, я все еще должен объявить свои «оси» внутри декларации «Chart», а не отдельно в стиле. Главный вопрос остается: «Если я могу установить свойство в блоке« Chart », почему я не могу установить его с помощью стиля?» Обратите внимание, что я изменил порядок вопросов. Спасибо, что посмотрели. – Vanlalhriata

+0

Правильно, поэтому решение будет моим первым ответом, а объяснение - вторым. –

0

Я отвечаю в новой позиции, так как вы изменили запрос ....

Вы ожидаете, что синтаксис по умолчанию будет примерно таким:

<Style x:Key="linearAxisStyle_Alt" TargetType="{x:Type charting:Chart}"> 
     <Setter Property="Axes"> 
      <Setter.Value> 
       <Setter Property="LinearAxis"> 
        <Setter.Value> 
         <charting:LinearAxis Orientation="Y" Minimum="0" /> 
        </Setter.Value> 
       </Setter> 
      </Setter.Value> 
     </Setter> 
</Style> 

Проблема (которая на самом деле не является одной) заключается в том, что элемент «Оси» не имеет свойства стиля. Поэтому вы не можете установить стиль, унаследованный его дочерним элементом - LinearAxis. Вот почему вы получаете сообщение об ошибке: «property не может быть null». Конечно, это невозможно, потому что его не существует.

Таким образом, окончательный ответ на ваш запрос - (к сожалению) невозможен. Надеюсь, это даст вам лучшее понимание.

+0

Да 'Axes' не имеет свойства стиля. 'Axes' является, по сути, свойством -' Collection' объектов, которые реализуют 'IAxis', одним из которых является' LinearAxis'. Внутри объявления «Chart» я могу добавить объект LinearAxis в эту коллекцию. Тем не менее, я не могу добавить один и тот же объект в один и тот же сборник с помощью стиля «Chart» - вот что меня смущает. Дело не в том, что я пытаюсь создать стиль «Оси» или «Линейный Аксис». В любом случае, спасибо еще раз. – Vanlalhriata

+1

Я понимаю ваше замешательство, и вы правы с интерфейсом и коллекцией осей. Однако существует большая разница между установкой свойства в самом приложении и созданием определения стиля в ressource dic. Во всяком случае, я надеюсь, на ваш вопрос ответят. –

+0

Я предполагаю, что ответ лежит в той разнице, о которой вы говорили, - о том, где вы устанавливаете свойство. Мне придется больше почитать в этой области. Я буду держать вопрос открытым, пока нет определенного ответа. Спасибо – Vanlalhriata

Смежные вопросы