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

标签 c# wpf string dynamic-data-display

使用 WPF(不是 Silverlight)D3,是否可以将字符串放在 Y 轴上? 我具体说的是这样一种情况,在这种情况下,我有一个带有状态值的时间线图(假设“高”、“中”和“低”映射为 1、0 和 -1)并希望在 y 轴上显示状态刻度而不是数字...

谢谢!

最佳答案

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

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

关于c# - WPF DynamicDataDisplay - 在 Y 轴上放置字符串而不是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13364917/

相关文章:

c# - 当按下 'Next' 按钮时如何继续显示 LINQ 结果?

c# - 如何使用 Fluent NHibernate 和 SchemaUpdate.Execute() 索引外键?

c++ - 有没有更好的方法来解析这样的一行文本?

C++:处理整数和字符串的函数模板

c# - 如何在路径上设置渐变动画以在 WPF/WCF 应用程序中可视化数据流

c# - 捕获 "Operation cancelled by user"异常的最佳方法是什么

c# - 如何检测用户是否更改了组合框选择

WPF 3D : How to convert a single AxisAngleRotation3D into separate AxisAngleRotation3D?

c# - 当前时间在 WPF DLL 中不起作用

java - 使用java计算字符串数组中的出现次数并删除重复项