C# WPF DynamicDataDisplay-将字符串放在Y轴上而不是数字

C# WPF DynamicDataDisplay-将字符串放在Y轴上而不是数字,c#,wpf,string,dynamic-data-display,C#,Wpf,String,Dynamic Data Display,使用WPF(不是Silverlight)D3,可以在Y轴上放置字符串吗? 我特别谈论的是一种情况,在这种情况下,我有一个带有状态值的时间线图(比如说“高”和“中”以及“低”映射为1、0和-1),并且希望y轴上的状态标记而不是数字 谢谢 您可以使用LabelProvider来实现所需的效果。您必须创建一个新的LabelProvider类,该类派生自LabelProviderBase,或者更具体地说,派生自NumericLabelProviderBase。您应该能够使用新的LabelProvider

使用WPF(不是Silverlight)D3,可以在Y轴上放置字符串吗? 我特别谈论的是一种情况,在这种情况下,我有一个带有状态值的时间线图(比如说“高”和“中”以及“低”映射为1、0和-1),并且希望y轴上的状态标记而不是数字


谢谢

您可以使用LabelProvider来实现所需的效果。您必须创建一个新的LabelProvider类,该类派生自LabelProviderBase,或者更具体地说,派生自NumericLabelProviderBase。您应该能够使用新的LabelProviderClass中的if或开关获取所有的记号(1,0-1),并将它们更改为字符串。在标签提供者的源代码中有大量的示例,您可以将其用作基础

您要覆盖的方法是CreateLabels。这里是我想出的一个快速方法,应该(希望!)让你达到你需要的地方。在您创建的新类中实现

public override UIElement[] CreateLabels(ITicksInfo<double> ticksInfo) {            

        var ticks = ticksInfo.Ticks;
        Init(ticks);            

        UIElement[] res = new UIElement[ticks.Length];
        LabelTickInfo<double> tickInfo = new LabelTickInfo<double> { Info = ticksInfo.Info };
        for (int i = 0; i < res.Length; i++) {
            tickInfo.Tick = ticks[i];
            tickInfo.Index = i;
            string labelText = "";

            if(Convert.ToInt32(tickInfo.Tick) == 1) {
                labelText = "High";
            } else if(Convert.ToInt32(tickInfo.Tick) == 0) {
                labelText = "Medium"
            } else if(Convert.ToInt32(tickInfo.Tick) == -1) {
                labelText = "Low"
            } else {
                labelText = ""
            }

            TextBlock label = (TextBlock)GetResourceFromPool();
            if (label == null) {
                label = new TextBlock();
            }

            label.Text = labelText;
            label.ToolTip = ticks[i].ToString();

            res[i] = label;

            ApplyCustomView(tickInfo, label);
        }
        return res;
    }

不要使用上解。使我的VS出现许多编译器错误。我在VS2013上尝试了3个小时的解决方案,但没有成功。使用函数绘制图形的解决方案:

 dimSeviyesiAxis.LabelProvider.CustomFormatter = (tickInfo) =>
        {
            return "%" + tickInfo.Tick.ToString();
        };
哪个DIMSEVIIESAXIS是xaml轴名称?轴标签以“%”开头。在返回之前,您可以对任何条件语句进行编码。以下是源链接:


杰森,我应该带你去。再次感谢。你能告诉我如何在绘图仪定义中使用这个方法吗?Jason,你的地址是什么?把花送到哪里去?顺便说一句,你看过这个吗?哈哈,别担心!我已经在这个库中工作了一段时间,看到没有文档,我很难过。我很高兴能帮助那些和我经历过同样挣扎的人!只要你接受答案,并可能投一些赞成票,我很高兴;)
 dimSeviyesiAxis.LabelProvider.CustomFormatter = (tickInfo) =>
        {
            return "%" + tickInfo.Tick.ToString();
        };