c# - 如何在 WPF 图表中为 Y 轴混合指数/小数格式

标签 c# wpf xaml charts data-visualization

谁能建议在使用 System.Windows.Controls.DataVisualization.Charting 时如何为 WPF 中的 Y 轴标签自定义格式。

例如 - 为值 < 0.01 显示指数格式,否则将值四舍五入为 0.1、0.2 等。

最佳答案

使用自定义 AxisLabelStyleConverter:

enter image description here

XAML:

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp87"
        xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
        x:Class="WpfApp87.MainWindow"
        mc:Ignorable="d"
        Title="MainWindow" Height="475" Width="525">

    <Window.Resources>
        <local:ValueToExponentialConverter x:Key="conv1"/>
    </Window.Resources>

    <Grid>

        <chartingToolkit:Chart Title="Sample Chart">
            <chartingToolkit:Chart.DataContext>
                <PointCollection>
                    <Point X="1" Y="-0.010"/>
                    <Point X="2" Y="-0.008"/>
                    <Point X="3" Y="-0.006"/>
                    <Point X="4" Y="-0.004"/>
                    <Point X="5" Y="-0.002"/>
                    <Point X="6" Y="0.0"/>
                    <Point X="7" Y="0.002"/>
                    <Point X="8" Y="0.004"/>
                    <Point X="9" Y="0.006"/>
                    <Point X="10" Y="0.008"/>
                    <Point X="11" Y="0.010"/>
                    <Point X="12" Y="0.012"/>
                    <Point X="13" Y="0.014"/>
                    <Point X="14" Y="0.016"/>
                    <Point X="15" Y="0.018"/>
                    <Point X="16" Y="0.020"/>
                </PointCollection>
            </chartingToolkit:Chart.DataContext>
            <chartingToolkit:Chart.Axes>
                <chartingToolkit:LinearAxis Orientation="Y" 
                                            Location="Left" 
                                            Interval="0.002"
                                            Minimum="-0.01"
                                            Maximum="0.02"
                                            ShowGridLines="True">
                    <chartingToolkit:LinearAxis.AxisLabelStyle>
                        <Style TargetType="chartingToolkit:AxisLabel">
                            <Setter Property="StringFormat" Value="{Binding Converter={StaticResource conv1}}"/>
                            <Setter Property="FontSize" Value="14"/>
                        </Style>
                    </chartingToolkit:LinearAxis.AxisLabelStyle>
                </chartingToolkit:LinearAxis>
            </chartingToolkit:Chart.Axes>
            <chartingToolkit:ColumnSeries DependentValuePath="Y" 
                                          IndependentValuePath="X" 
                                          ItemsSource="{Binding}"/>
        </chartingToolkit:Chart>

    </Grid>
</Window>

转换器:

public class ValueToExponentialConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        double d = (double)value;

        if (d == 0 || 0.0099 < d)
            return Math.Round(d, 3).ToString();
        else return d.ToString("0.#E+0");
    }

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

}

关于c# - 如何在 WPF 图表中为 Y 轴混合指数/小数格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47434900/

相关文章:

c# - BitmapImage - 图像下载问题

c# - 无法使用 Visual Studio 2012 RTM 在 Silverlight 5 项目中添加 XAML 断点

c# - 我可以在 List<T> 中搜索特定值吗?

c# - 使用 Javascript 在使用 ASP.NET 时检查表单输入

c# - Silverlight 4 真的支持 AppDomain.GetAssemblies() 吗?

c# - 从 DataGrid WPF C# 中的选定行获取特定单元格的数据

c# - 我在使用托管服务身份对受 AAD 保护的 Azure 应用服务进行身份验证时遇到问题

wpf - 我怎样才能使这个自定义扩展器成为非硬编码的高度?

wpf - 将 UserControl 的 datacontext 设置为在父 View 模型中定义的 ViewModel

c# - VS2012资源 "X"无法解析