internal static object CoerceNonNullable(object value, Type targetType, bool ignoreImplicitXamlConversions) { if (!ignoreImplicitXamlConversions && IsImplicitXamlConvertion(value.GetType(), targetType)) { return(value); } if (targetType == typeof(string)) { return(value.ToString()); } if (targetType.IsEnum && value is string) { return(Enum.Parse(targetType, (string)value, false)); } if (targetType == typeof(Color)) { var c = new ColorConverter(); if (c.IsValid(value)) { return(c.ConvertFrom(value)); } return(value); } if (targetType == typeof(Brush) || targetType == typeof(SolidColorBrush)) { var c = new BrushConverter(); if (c.IsValid(value)) { return(c.ConvertFrom(value)); } if (value is Color) { return(BrushesCache.GetBrush((Color)value)); } return(value); } var cc = TypeDescriptor.GetConverter(targetType); try { if (cc != null && cc.IsValid(value)) { return(cc.ConvertFrom(null, System.Globalization.CultureInfo.InvariantCulture, value)); } return(System.Convert.ChangeType(value, targetType, System.Globalization.CultureInfo.InvariantCulture)); } catch { return(value); } }
public static SolidColorBrush Convert(object value, byte?customA = null) { if (value == null) { return(null); } Color color; if (value is System.Drawing.Color) { var mColor = (System.Drawing.Color)value; color = Color.FromArgb(mColor.A, mColor.R, mColor.G, mColor.B); } else { color = (Color)value; } if (customA != null) { color.A = customA.Value; } return(BrushesCache.GetBrush(color)); }