我该如何在WPF和C#中绘制文本和形状?

3

我希望做一些基本的WPF图形,例如矩形、线条、圆形和文本。

什么时候应该使用Drawing,什么时候应该使用DrawingVisual?

我有一些使用Drawing的代码,我将它们渲染到一个DrawingImage中,并在图像控件中显示。这是正确的方法吗?我无法看到如何向绘图添加文本。我也遇到了定位问题。我应该渲染到Canvas吗?

我有一些使用DrawingVisual并写入DrawingContext的代码。这就像WinForms。这是推荐的方法吗?

您对于用于基本图形和标签的API有任何高级建议吗?这些选项是否适用于Silver Light和桌面?


2D或3D图形?- Silverlight不支持完整的3D。 - Danny Varod
2D图形,例如,带有线条、文本和形状的散点图或箱线图。 - user364981
2个回答

2
您在评论中提到您实际上正在实现散点图或类似的图表。在WPF中,通常是通过模板化现有控件(如listview)来创建此类图表。这听起来有些违反直觉,但比起自己绘制图表,这种方法更加容易且功能更强大。
Charles Petzhold的这篇文章展示了一种用这种方式实现散点图的方法,并详细介绍了如何使其在10,000个以上数据点的情况下保持高性能。

1

你最好直接渲染到画布(Canvas)上。如果你在画布上添加“形状(shapes)”,WPF会为你处理所有的绘图。

详情请参见WPF中的形状和基本绘图。


谢谢,我会尝试使用Shapes和Canvas。我能在Canvas上定位文本吗?该应用程序需要绘制约1000个基本形状,例如线条、圆形和矩形以及一些标签。这是一个自定义图形输出。我读到可视化对于速度很好,但它们在Silverlight中是否有效?我正在寻找一种将图形和文本一起呈现并具有与WinForms中绘图相似的位置精度的方法。 - user364981
@peterhu:这个文本对于这个问题很好用 - 在我的经验中(WPF),这对于这么多项来说非常棒。 - Reed Copsey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接