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

时间:2012-11-13 16:45:37

标签: c# wpf string dynamic-data-display

使用WPF(非Silverlight)D3,是否可以在Y轴上放置字符串? 我特别谈到一种情况,其中我有一个带有状态值的时间线图(让我们说“高”,“中”和“低”映射为1,0和-1)并希望y轴上的状态滴答而不是数字......

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用LabelProvider来达到理想的效果。您将不得不创建一个新的LabelProvider类,该类源自LabelProviderBase,或者更具体地说,在您的情况下,NumericLabelProviderBase。您应该能够获取所有的刻度(1,0-1)并使用新LabelProviderClass中的if或switch将它们更改为字符串。您可以将标签提供商的来源作为基础使用大量示例。

您要覆盖的方法是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;
    }

要将此新LabelProvider指定给ChartPlotter,请在XAML中指定要标记的轴,或在C#中将其创建为对象:

yAxis.LabelProvider = new ZazkapulskLabelProvider();

答案 1 :(得分:0)

不要使用上层溶液。让我的VS出现很多编译错误。我在3小时内在VS2013上尝试该解决方案,但没有奏效。使用其中函数绘制图形的解决方案:

 dimSeviyesiAxis.LabelProvider.CustomFormatter = (tickInfo) =>
        {
            return "%" + tickInfo.Tick.ToString();
        };

哪个dimSeviyesiAxis是xaml轴名称,轴标签以&#34;%&#34;开头。在返回之前,您可以编写任何条件语句。这是源链接:

http://dynamicdatadisplay.codeplex.com/discussions/462842