我想避免使用Axis中的十进制数字,我该怎么做?
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>
答案 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 :(得分:2)
LinearAxis具有Iterval属性。尝试设置
<Charting:Chart.Axes>
<Charting:LinearAxis Interval="1" Orientation="Y" Minimum="0" Title="" Location="Left" />
</Charting:Chart.Axes>
根据你的评论(对不起,我认为问题更简单;)),我使用类似的方法在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添加到图表中。我的NumericConverter只是测试图表想要显示的标签的值,并使用我的逻辑相应地对其进行格式化。您可以测试值是否为整数,因此返回正确的字符串或否则为空。我认为它可行。
答案 2 :(得分: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但也许你会发现它很有用。
答案 3 :(得分:1)
这是我提出来解决此问题的解决方案,摘自blog:
public class BarSeriesAxis : LinearAxis
{
protected override double CalculateActualInterval(Size availableSize)
{
var result = base.CalculateActualInterval(availableSize);
return (result < 1.0) ? 1.0 : result;
}
}
你让图表做他们的事情,并在需要时覆盖间隔。容易将上面的内容更改为最接近的整数。
答案 4 :(得分:1)
只需使用LinearAxis的Interval属性:
<chartingToolkit:LinearAxis Orientation="Y" Interval="1" Minimum="0"/>
很适合我。