System.Drawing.Color和System.Windows.Media.Color有什么区别?

39

基本上,为什么需要两个对于一个相当简单的概念的抽象?


1
WPF与Window Forms。两个UI层,两套定义。 - Hans Passant
1
更加混乱的是,我注意到在WPF/Silverlight中,Brush类型属性在设计器中选择System.Drawing.Color(这些颜色在System.Windows.Media.Color中不可用),尽管此命名空间对Silverlight不可用。 - Mike Guthrie
更让我困惑的是,System.Drawing.Color 的方法功能比 System.Windows.Media.Color 更多(例如 FromArgb 有各种重载)。 - jep
所有颜色的枚举/列表实际上有不同的名称:System.Drawing.Color与System.Windows.Media.Colors! Drawing.Color具有更多功能,例如Name属性。例如,System.Drawing.Color.Blue.Name应类似于nameof(System.Windows.Media.Colors.Blue) 但是System.Windows.Media.Color(没有's')类也包含静态方法FromArgb,但重载较少。 - EricBDev
1
非常不幸的是,UWP和.NET Standard使用System.Drawing.Color。 你可能认为Media.Color作为更近期的选择应该替换Drawing.Color。但事实并非如此。看起来,Media.Color正在被遗弃。对于构建WPF和UWP通用库的人来说,这是个坏消息。 - AQuirky
2个回答

20

System.Windows.Media.ColorSystem.Windows.Media命名空间的一部分:

提供各种类型以在Windows Presentation Foundation(WPF)应用程序中集成丰富的媒体,包括绘图、文本和音频/视频内容。

System.Drawing.ColorSystem.Drawing命名空间的一部分:

System.Drawing命名空间提供对GDI+基本图形功能的访问。更高级的功能则由System.Drawing.Drawing2D、System.Drawing.Imaging和System.Drawing.Text命名空间提供。

我猜后者是特定于Windows的,而前者更通用,更容易移植到Mac OS等系统,以便在Silverlight应用程序中使用。

后者的命名空间还有一个警告,这也支持了这个猜测:

不建议在Windows或ASP.NET服务中使用System.Drawing命名空间中的类。从其中任何一个应用程序类型中尝试使用这些类都可能产生意想不到的问题,例如服务性能下降和运行时异常。


6
虽然从技术上讲是正确的,但这并没有回答更基本的问题,即为什么微软决定将颜色概念与图形联系起来。 - O'Rooney

11

我认为这并非出于某种“需要”,只是他们在早期(可能错误地)决定将Color类放入WinForms特定的System.Drawing中,因为当时只有Win32和WinForms。

后来,当他们想要增强“Color”中的概念时,他们不希望WPF依赖于WinForms。因此,他们没有通过将更抽象的Color类移动到通用程序集来修复情况,而是在WPF中复制并粘贴了一个新的Color类。


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