2011-01-25 2 views
4

Я хочу избежать десятичных чисел в моей оси, как я могу это сделать?LinearAxis без десятичных чисел

enter image description here

XAML:

<Charting:Chart VerticalAlignment="Stretch" 
       HorizontalContentAlignment="Stretch"> 

     <Charting:Chart.Axes> 
      <Charting:LinearAxis Orientation="Y" Minimum="0" Title="" Location="Left" 
        /> 
     </Charting:Chart.Axes> 

     <Charting:Chart.Series> 

      <Charting:ColumnSeries ItemsSource="{Binding Persons}" 
         DependentValueBinding="{Binding Count}" 
         IndependentValueBinding="{Binding Category}"> 
      </Charting:ColumnSeries> 
     </Charting:Chart.Series> 
    </Charting:Chart> 

ответ

2

LinearAxis имеет Iterval свойство. Попробуйте установить

<Charting:Chart.Axes> 
     <Charting:LinearAxis Interval="1" Orientation="Y" Minimum="0" Title="" Location="Left" /> 
    </Charting:Chart.Axes> 

Согласно с вашим комментарием (извините, я thinked проблема была проще;)), я использовал подобный подход для визуализации метки на оси Y:

в ресурсах, использовать стиль например

<Style x:Key="ChartLabelNoDecimal" TargetType="chartingToolkit:AxisLabel"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="chartingToolkit:AxisLabel"> 
        <TextBlock DataContext="{TemplateBinding FormattedContent}" Text="{Binding Converter={StaticResource NumericConverter1}}" FontSize="9" /> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

public class NumericConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     double x = double.Parse(value.ToString()); 

     if(/*check if has decimals*/) return string.Empty; 
     else return x; 

    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

затем вы можете добавить LinearAxis с этим стилем в свой график. My NumericConverter просто проверьте значение метки, которую диаграмма хочет отобразить и соответствующим образом отформатировать, с моей логикой. Вы можете проверить, является ли значение целым, поэтому верните правильную строку или пустое в противном случае. Я думаю, это может сработать.

+0

Спасибо michele, но проблема в том, что я не хочу, чтобы интервал всегда был 1, так как иногда у меня очень высокие значения, а интервал должен быть 100, например. – Erez

1

Вы можете изменить стиль этого:

<Style x:Key="EmptyStyle" TargetType="charting:NumericAxisLabel"> 
    <Setter Property="IsTabStop" Value="False" /> 
    <Setter Property="StringFormat" Value="{}{0:0.##}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="charting:NumericAxisLabel"> 
       <TextBlock /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Кроме того, вы должны создать:

<charting:LineSeries.DependentRangeAxis> 
     <charting:LinearAxis AxisLabelStyle="{StaticResource EmptyStyle}" 
      Orientation="Y" 
      ShowGridLines="True"/> 
</charting:LineSeries.DependentRangeAxis> 

Это только пример, и вам нужно настроить его под свои нужды. Example of slightly different thing, но, возможно, вы найдете его полезным.

+0

Спасибо, но не работает. – Erez

+0

Пожалуйста, попробуйте пересмотренную версию. – baalazamon

1

Это решение, которое я придумал, чтобы исправить это, отрывок из моей blog:

public class BarSeriesAxis : LinearAxis 
{ 
    protected override double CalculateActualInterval(Size availableSize) 
    { 
     var result = base.CalculateActualInterval(availableSize); 
     return (result < 1.0) ? 1.0 : result; 
    } 
} 

Вы позволяете графики делают свое дело, и просто переопределить интервал, когда вам нужно. Легко изменить выше, чтобы округлить до ближайшего целого числа.

+0

Далеко лучшее решение. Это нужно увеличить. Спасибо, Андрей! –

3

В случае, если вы все еще боретесь с этим, или если кто-либо еще заинтересован: решение почти то, что написал baalazamon. Это просто, что {0: 0. ##} будет отображать две десятичные цифры, если они существуют (это то, что «. ##» означает). Так что вы должны написать это

<Style x:Key="EmptyStyle" TargetType="charting:NumericAxisLabel"> 
    <Setter Property="IsTabStop" Value="False" /> 
    <Setter Property="StringFormat" Value="{0:0}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="charting:NumericAxisLabel"> 
       <TextBlock /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

И, конечно, нужно добавить следующее:

<charting:LineSeries.DependentRangeAxis>  
     <charting:LinearAxis AxisLabelStyle="{StaticResource EmptyStyle}"  
      Orientation="Y"  
      ShowGridLines="True"/>  
</charting:LineSeries.DependentRangeAxis> 

Я надеюсь, что это решит вашу проблему.

+1

Это не сработало для меня. Он ничего не показывает. –

1

Просто используйте свойство Interval LinearAxis:

<chartingToolkit:LinearAxis Orientation="Y" Interval="1" Minimum="0"/> 

Работы для меня очень хорошо.

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