c# - 由于 System.Windows.Point/System.Drawing.PointF 差异,在 WPF/Silverlight 和 GDI+ 之间共享库时出现问题

标签 c# wpf winforms silverlight gdi+

在我目前正在做的项目中 http://sourcecodecloud.codeplex.com/我有一个包含非平凡几何和布局算法的库。它们完全独立于图形引擎。

该应用程序最初是为 GDI+ 编写的,现在我要实现它的 Silverlight 和/或 WPF 端口。问题是我的所有算法都使用 System.Drawing.PointFSizeFRectangleF 结构。它们都是基于 float 的。对应的 WPF/Silverlight 类是 double

问题是,有人有这方面的经验吗?什么是最好的方法?

  1. 为 Size、Point、Rectangle 等创建自己的包装器,可以包装这两种变体。
  2. 坚持使用 System.Drawing 或 System.Windows 并将其转换为另一个。负面影响是对“外星人”集会的不必要引用。
  3. 还有其他魔法吗?

最佳答案

一种可能适用的方法是使用 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/

相关文章:

c# - 使用 Roslyn 将类(class)成员添加到特定位置?

c# - Datagrid 组合框使 relativsource 工作

javascript - Selenium:使用 C# 在 IWebElement 上触发鼠标滚轮

WPF 文本框保留可见插入符号

c# - 在 C# Winform 上使用显示对话框时出现非常奇怪的错误

c# - 绕过 Controller MVC 上的 Windows 身份验证

wpf - 蒙皮:使用一种颜色作为另一种颜色的静态资源

c# - 绑定(bind)导致 StackOverflow

c# - 系统参数异常 : DataGridViewComboBoxCell value is not valid

c# - 如何在图像上绘制带有轮廓的文本?