9

我正在使用动态数据显示 WPF 图表。我需要在图表上绘制的曲线上的每个点旁边显示一个标签。

确切的功能如下:

  1. 每条曲线都有一个保存其数据的对象和一个包含颜色、标记形状等的描述。它还告诉我标签对于该特定曲线是否必须可见。

  2. 还有一个选项使用复选框来隐藏/显示绘图上所有曲线上所有点的标签。

  3. 还有第三个选项,用户可以左键单击标记并查看其旁边的标签。

现在,我之前通过为每个点添加标签以及 ElementMarkerPointGraph 并设置标签的可见性来实现它。我知道这种方法会对性能产生巨大影响。

我现在正在寻找一个解决方案,我可以在我提供的位置将文本直接呈现到画布上。我还需要从画布中删除文本的帮助。

有没有办法将文本本地添加到画布?最有效的方法是什么?

编辑:当绘图仪缩放时,我需要移动文本。我已经知道绘图仪何时缩放,我需要能够将文本移动到适当的位置。

4

3 回答 3

22

我不确定这是否会为您提供缩放目的,但下面的代码可用于在画布内添加文本..我在谷歌搜索时从网站上得到它。

private void Text(double x, double y, string text, Color color) 
{
    TextBlock textBlock = new TextBlock();
    textBlock.Text = text;
    textBlock.Foreground = new SolidColorBrush(color);
    Canvas.SetLeft(textBlock, x);
    Canvas.SetTop(textBlock, y);
    canvasObj.Children.Add(textBlock);
}
于 2012-11-14T07:26:59.587 回答
5

好的。我的具体实现不能放在这里。但我可以提供一些关于如何做到这一点的想法。

因此,创建一个从 Canvas 派生的简单用户控件。

class CustomCanvas : Canvas
{
    protected override void OnRender(DrawingContext dc)
    {
        FormattedText someFormattedText = new FormattedText(someText, System.Globalization.CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
                someTypeFace, someFontSize, someColor);
        dc.DrawText(someFormattedText, new Point(15, 15));
    }
}

如果您不希望它进一步子类化/覆盖,您可以密封该类。

就是这样。您可以查看绘图上下文中可用的其他方法来做一些其他的事情。:)

于 2012-11-27T06:17:26.870 回答
2

我自己想通了。我将重写 OnRender 方法来处理这个问题。我可以使用绘图上下文绘制文本。

于 2012-11-14T08:43:13.830 回答