2012-04-25 48 views
0

我試圖從Xaml字符串解析LinearGradientBrush,沒有任何問題我使用ColorConverter.ConvertFromString進行普通文本或html顏色轉換。ColorConverter失敗,解析ScRGB

最近我遇到了一些使用ScRGB格式"sc#scA, scR, scG, scB"從Adobe Illustrator解析成Expression Blend的顏色。這似乎打破了ColorConverter,因爲從Color結構的ScA值似乎解析錯誤的值;例如0.2變爲2和0.5變爲5.

我的代碼是相當簡單:

string colorStr = "sc#0.117647059, 0, 0, 0"; 
Color color = (Color)ColorConverter.ConvertFromString(colorStr); 
Console.WriteLine(color.ScA); 

輸出:1,176471E + 08,預期:0,1176471

是在這一個錯誤.NET Framework(我在4)?有沒有解決方法?有人有清潔修復程序嗎?

回答

1

你有一個文化問題。顯然你生活在世界的一個地方,浮點數值中的小數點是逗號而不是句號。但是你的顏色字符串格式化了一段時間。所以當這個值被轉換爲float值時,它將字符串中的句點看作千位分隔符,而不是小數點。而「0117647059」確實是1,176471e8。

您需要使用ColorConverter.ConvertFrom()重載,它接受CultureInfo引用。通過CultureInfo.InvariantCulture。或者以某種方式將Adobe工具輕敲在頭上,以便生成適當的本地化字符串。

+0

嗯,你是對的!我覺得它有點奇怪,因爲我提供的格式在XAML中是標準的。爲什麼StaticConverter無法正確解析,我覺得很奇怪!我討厭那些文化設置:( – Kolky 2012-04-25 14:24:38