コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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));
        }