动态数据显示 - WPF - 需要将文本添加到画布 - C#
Posted
技术标签:
【中文标题】动态数据显示 - WPF - 需要将文本添加到画布 - C#【英文标题】:Dynamic Data Display - WPF - Need to add text to canvas - C# 【发布时间】:2012-11-02 16:19:45 【问题描述】:我正在使用动态数据显示 WPF 图表。我需要在图表上绘制的曲线上的每个点旁边显示一个标签。
具体功能如下:
每条曲线都有一个对象来保存它的数据和一个包含颜色、标记形状等的描述。它还告诉我标签对于该特定曲线是否必须可见。
还有一个选项使用复选框来隐藏/显示绘图上所有曲线上所有点的标签。
还有第三个选项,用户可以左键单击标记并查看其旁边的标签。
现在,我之前通过为每个点添加标签以及 ElementMarkerPointGraph 并设置标签的可见性来实现它。我知道这种方法会对性能造成巨大影响。
我现在正在寻找一种解决方案,我可以在我提供的位置将文本直接呈现到画布上。我还需要从画布中删除文本的帮助。
有没有办法在画布上添加原生文本?最有效的方法是什么?
编辑:当绘图仪缩放时,我需要移动文本。我已经知道绘图仪何时缩放,我需要能够将文本移动到适当的位置。
【问题讨论】:
没有代码很难说。你如何显示曲线?我们能否拥有实际绘制曲线的 XAML 片段? 它使用 Plotter2DExtensions 类中的扩展方法。您可以查看 codeplex 上的 D3 源代码。无论如何,我决定使用 OnRender 方法来实现这一点。谢谢! [链接]dynamicdatadisplay.codeplex.com 【参考方案1】:我不确定这是否会为您提供缩放目的,但下面的代码可用于在画布内添加文本..我在谷歌搜索时从网站上得到它。
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);
【讨论】:
谢谢!但我已经知道要添加文本块,但我希望避免使用更多控件。 :)【参考方案2】:好的。我的具体实现不能放在这里。但我可以提供一些关于如何做到这一点的想法。
所以创建一个从 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));
如果您不希望它被进一步子类化/覆盖,您可以密封该类。
就是这样。您可以查看绘图上下文中可用的其他方法来做一些其他的事情。 :)
【讨论】:
【参考方案3】:我自己想通了。我将重写 OnRender 方法来处理这个问题。我可以使用绘图上下文来绘制文本。
【讨论】:
以上是关于动态数据显示 - WPF - 需要将文本添加到画布 - C#的主要内容,如果未能解决你的问题,请参考以下文章
wpf 添加了viewbox之后,画布里面的内容就不显示了,怎么解决,我需要画布的内容随着窗口一起放大