c# - 带有自定义轴标签的 xaml c# 图表

标签 c# wpf xaml charts

我使用 System.Windows.Controls.DataVisualization.Charting 来绘制和显示带有 LineSeries 的图表,其 Y 值在 1 到 5 之间。我使用 向 LineSeries 添加值>System.Collections.Generic.KeyValuePair(TKey,TValue)。我不想在 Y 标签图表中显示从 1 到 5 的数字,而是显示从 E 到 A 的字母。

我怎样才能达到这个结果?

最佳答案

首先创建一个转换器来将数值转换为字母值:

 public class NumericToAlphaConverter:IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        switch (value.ToString())
        {
            case "1":
                return "A";
            case "2":
                return "B";
            case "3":
                return "C";
            case "4":
                return "D";
            case "5":
                return "E";
            default: return null;
        }
    }

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

使用该转换器定义自定义 Y 标签样式:

 <Style TargetType="chartingToolkit:AxisLabel">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="chartingToolkit:AxisLabel">
                                    <TextBlock DataContext="{TemplateBinding FormattedContent}" Text="{Binding Converter={StaticResource NumericToAlphaConverter}}" />
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>

这里是打洞UI和后面对应的代码

<Window.Resources>
    <wpfApplication12:NumericToAlphaConverter x:Key="NumericToAlphaConverter"/>
</Window.Resources>
<Grid>
    <chartingToolkit:Chart   Title="Line Series"  
    VerticalAlignment="Top" Margin="0" Height="254" >
        <chartingToolkit:LineSeries  x:Name="serie"
                                   IndependentValueBinding="{Binding Path=Key}"
                                   DependentValueBinding="{Binding Path=Value}"      
    IsSelectionEnabled="True"/>
        <chartingToolkit:Chart.Axes>
            <chartingToolkit:LinearAxis Orientation="Y" 
                                    Title="Y val" 
                                        Maximum="5"
                                        Minimum="1"
                                        >
                <chartingToolkit:LinearAxis.AxisLabelStyle>
                    <Style TargetType="chartingToolkit:AxisLabel">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="chartingToolkit:AxisLabel">
                                    <TextBlock DataContext="{TemplateBinding FormattedContent}" Text="{Binding Converter={StaticResource NumericToAlphaConverter}}" />
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </chartingToolkit:LinearAxis.AxisLabelStyle>
            </chartingToolkit:LinearAxis>
        </chartingToolkit:Chart.Axes>

    </chartingToolkit:Chart>
</Grid>

背后的代码:

public ObservableCollection<KeyValuePair<int, int>> LineSeriesData = new ObservableCollection<KeyValuePair<int, int>>()
    {
        new KeyValuePair<int, int>(12,1),
        new KeyValuePair<int, int>(5,2),
        new KeyValuePair<int, int>(5,3),
        new KeyValuePair<int, int>(5,4)

    };
    public MainWindow()
    {
        InitializeComponent();
        serie.ItemsSource = LineSeriesData;
    }

enter image description here

关于c# - 带有自定义轴标签的 xaml c# 图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30733783/

相关文章:

c# - 如何动态确定对象属性名称

c# - EF Core DbUpdateConcurrencyException 未按预期工作

c# - 如果列表/集合为空或 null 且无法迭代(不是参数),抛出什么异常类型?

c# - 覆盖 'public' 继承成员时无法更改访问修饰符 '

c# - 如何延迟循环周期?

c# - 为项目列表选择正确的控件

wpf - 使用值转换器生成 GUI 友好的字符串是否是对值转换器的滥用?

.net - 有没有好的 WPF 图表制作者/工具包/提供者?

AvalonDock 中 float 窗口的 XAML

c# - 将 GridView 选定项设置为无