【问题标题】:WPF charting toolkit y-axis labels appear as zero for small numbersWPF 图表工具包 y 轴标签对于小数字显示为零
【发布时间】:2012-03-05 01:14:59
【问题描述】:

我使用 WPF 工具包 (3.5) 图表工具包创建了一个图表,但无法让 y 轴标签显示小数字(例如 .001)。我已将 y 轴的最小值和最大值分别设置为 0.001 和 0.009,尽管图表在图形上是正确的,但 y 轴范围标签显示“0”或“.01”。我猜这是 3.5 工具包中图表控件的限制,但我希望我遗漏了一些东西。下面是一些示例代码:

XAML:

    <Window x:Class="WpfChartApplication.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 Name="chart1">
        <chartingToolkit:LineSeries
                        Title="Rates"
                        ItemsSource="{Binding Rates}"
                        IndependentValueBinding="{Binding Time}"
                        DependentValueBinding="{Binding Value}"
                >
            <chartingToolkit:LineSeries.DependentRangeAxis>
                <chartingToolkit:LinearAxis
                                Orientation="Y"
                                Title="Y Value"
                                ShowGridLines="True"
                        Maximum=".009"
                        Minimum=".001"/>
            </chartingToolkit:LineSeries.DependentRangeAxis>
        </chartingToolkit:LineSeries>

        <chartingToolkit:Chart.Axes>
            <chartingToolkit:LinearAxis Orientation="X" 
                                        Title="X Value"
                                        ShowGridLines="True"
                                        />
        </chartingToolkit:Chart.Axes>
    </chartingToolkit:Chart>
</Grid>

以及背后的代码:

    using System.Collections.Generic;
    using System.Windows;

namespace WpfChartApplication
{
public partial class MainWindow : Window
{


    public MainWindow()
    {
        InitializeComponent();

        var cVm = new ChartViewModel();
        chart1.DataContext = cVm;
    }
}

public class ChartViewModel
{
    public List<Rate> Rates { get; set; }

    public ChartViewModel()
    {
        Rates = new List<Rate>();

        Rates.Add(new Rate(1, .001));
        Rates.Add(new Rate(2, .003));
        Rates.Add(new Rate(3, .001));
        Rates.Add(new Rate(4, .002));
        Rates.Add(new Rate(5, .001));
        Rates.Add(new Rate(6, .001));
        Rates.Add(new Rate(7, .003));
        Rates.Add(new Rate(8, .007));
        Rates.Add(new Rate(9, .009));
        Rates.Add(new Rate(10, .008));
    }
}

public class Rate
{
    public Rate(int time, double value)
    {
        Time = time;
        Value = value;
    }

    public int Time { get; set; }
    public double Value { get; set; }
}
}

【问题讨论】:

  • 当它们在 Rate 类中时,如何在视图中获取时间和值?对我来说,这些值没有显示出来!

标签: c# wpf charts wpftoolkit


【解决方案1】:

你可以改变标签样式来获得效果

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

        <TextBlock Text="{TemplateBinding FormattedContent}" />
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

<chartingToolkit:Chart Name="chart1">
  <chartingToolkit:LineSeries Title="Rates"
                              ItemsSource="{Binding Rates}"
                              IndependentValueBinding="{Binding Time}"
                              DependentValueBinding="{Binding Value}">
    <chartingToolkit:LineSeries.DependentRangeAxis>
      <chartingToolkit:LinearAxis Orientation="Y"
                                  Title="Y Value"
                                  ShowGridLines="True"
                                  AxisLabelStyle="{StaticResource NumericAxisLabelStyle}"
                                  Maximum=".009"
                                  Minimum=".001" />
    </chartingToolkit:LineSeries.DependentRangeAxis>
  </chartingToolkit:LineSeries>
  <chartingToolkit:Chart.Axes>
    <chartingToolkit:LinearAxis Orientation="X" Title="X Value" ShowGridLines="True" />
  </chartingToolkit:Chart.Axes>
</chartingToolkit:Chart>

希望这会有所帮助...

【讨论】:

  • 我很惊讶这不是图表控件的默认行为。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多