在我目前正在做的项目中 http://sourcecodecloud.codeplex.com/我有一个包含非平凡几何和布局算法的库。它们完全独立于图形引擎。
该应用程序最初是为 GDI+ 编写的,现在我要实现它的 Silverlight 和/或 WPF 端口。问题是我的所有算法都使用 System.Drawing.PointF
、SizeF
、RectangleF
结构。它们都是基于 float
的。对应的 WPF/Silverlight 类是 double
。
问题是,有人有这方面的经验吗?什么是最好的方法?
- 为 Size、Point、Rectangle 等创建自己的包装器,可以包装这两种变体。
- 坚持使用 System.Drawing 或 System.Windows 并将其转换为另一个。负面影响是对“外星人”集会的不必要引用。
- 还有其他魔法吗?
最佳答案
一种可能适用的方法是使用 namespace 别名。您使用别名而不是实际类型,并使用编译器指令在它们之间切换。由于命名空间别名是针对每个文件的,因此如果代码分布在大量文件中,则可能不适合。
#if GDI
using Point=System.Drawing.Point;
#else
using Point=System.Windows.Point;
#endif
如果您使用 var
,您可以消除很多检查、转换并保持性能。您仍然需要查看接受和返回特定类型的函数,例如 Math.Sin 等。
关于c# - 由于 System.Windows.Point/System.Drawing.PointF 差异,在 WPF/Silverlight 和 GDI+ 之间共享库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6962114/