在Silverlight中,在System.Drawing.Color和System.Windows.Media.Color之间转换的最佳方式是什么?

在Silverlight中,在System.Drawing.Color和System.Windows.Media.Color之间转换的最佳方式是什么?,silverlight,Silverlight,我正在尝试从System.Drawing.Color转换为Silverlight System.Windows.Media.Color。我实际上是想通过服务传递这种颜色 通过导线传递的System.Drawing.Color不会独立序列化argb值 我可以将argb值转换为32位整数 [DataMember] public int MyColor { get { return Color.Red.ToArgb(); } set {} } 但是我在System.Windows.Media

我正在尝试从System.Drawing.Color转换为Silverlight System.Windows.Media.Color。我实际上是想通过服务传递这种颜色

通过导线传递的System.Drawing.Color不会独立序列化argb值

我可以将argb值转换为32位整数

[DataMember]  
public int MyColor { get { return Color.Red.ToArgb(); } set {} }  
但是我在System.Windows.Media.Color中没有看到任何相应的方法将其转换回去


最好的方法是什么

System.Drawing.Color的32位表示采用一组字节顺序(例如ARGB),每个通道由8位表示

Silverlight没有做出这些假设。颜色存储为四个32位浮点值,顺序基于颜色配置文件

要从System.Drawing.Color创建媒体.Color值,应使用FromArgb/FromRgb方法并传入四个单独的组件


如有必要,您可以通过从组合的32位值中对这些组件进行AND“out”运算来获得这些组件。您知道(或可以找到)此颜色值中字节的顺序,这是Silverlight所没有的知识。

谢谢。这就是我所做的,尽管我必须添加.ToHtml方法才能以十六进制表示法输出它:

[DataMember]
public string MyColor { 
    get { 
        return ColorTranslator.ToHtml(  
                   Color.FromArgb(  
                       Color.Red.A, 
                       Color.Red.R, 
                       Color.Red.G, 
                       Color.Red.B  
            )); 
     } 
     private set{}   
}  
因此,在另一方面,我可以使用从这里借用的代码将十六进制转换为实心笔刷

它是有效的,但它是丑陋的,而且似乎相当复杂,因为我错误地认为,很明显,这将是一个单一的方法。也许在下一个版本中。

这就是我想要的,但我不推荐它

 String xamlString = "<Canvas xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" Background=\"MistyRose\"/>";
  Canvas c = (Canvas) System.Windows.Markup.XamlReader.Load(xamlString);
  SolidColorBrush mistyRoseBrush = (SolidColorBrush) c.Background;
  Color mistyRose = mistyRoseBrush.Color;
String xamlString=”“;
Canvas c=(Canvas)System.Windows.Markup.XamlReader.Load(xamlString);
SolidColorBrush mistyRoseBrush=(SolidColorBrush)c.背景;
颜色mistyRose=mistyRoseBrush.Color;
如果你问我的话,那完全是疯了——但那是从微软医生那里得到的