diff options
Diffstat (limited to 'Xamarin.Forms.Core/ColorTypeConverter.cs')
-rw-r--r-- | Xamarin.Forms.Core/ColorTypeConverter.cs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core/ColorTypeConverter.cs b/Xamarin.Forms.Core/ColorTypeConverter.cs new file mode 100644 index 00000000..547adf3b --- /dev/null +++ b/Xamarin.Forms.Core/ColorTypeConverter.cs @@ -0,0 +1,72 @@ +using System; +using System.Linq; +using System.Reflection; + +namespace Xamarin.Forms +{ + public class ColorTypeConverter : TypeConverter + { + public override object ConvertFromInvariantString(string value) + { + if (value != null) + { + if (value.Trim().StartsWith("#", StringComparison.Ordinal)) + return Color.FromHex(value); + string[] parts = value.Split('.'); + if (parts.Length == 1 || (parts.Length == 2 && parts[0] == "Color")) + { + string color = parts[parts.Length - 1]; + switch (color) + { + case "Default": + return Color.Default; + case "Transparent": + return Color.Transparent; + case "Aqua": + return Color.Aqua; + case "Black": + return Color.Black; + case "Blue": + return Color.Blue; + case "Fuchsia": + return Color.Fuchsia; + case "Gray": + return Color.Gray; + case "Green": + return Color.Green; + case "Lime": + return Color.Lime; + case "Maroon": + return Color.Maroon; + case "Navy": + return Color.Navy; + case "Olive": + return Color.Olive; + case "Purple": + return Color.Purple; + case "Pink": + return Color.Pink; + case "Red": + return Color.Red; + case "Silver": + return Color.Silver; + case "Teal": + return Color.Teal; + case "White": + return Color.White; + case "Yellow": + return Color.Yellow; + } + FieldInfo field = typeof(Color).GetFields().FirstOrDefault(fi => fi.IsStatic && fi.Name == color); + if (field != null) + return (Color)field.GetValue(null); + PropertyInfo property = typeof(Color).GetProperties().FirstOrDefault(pi => pi.Name == color && pi.CanRead && pi.GetMethod.IsStatic); + if (property != null) + return (Color)property.GetValue(null, null); + } + } + + throw new InvalidOperationException(string.Format("Cannot convert \"{0}\" into {1}", value, typeof(Color))); + } + } +}
\ No newline at end of file |