Ejemplo n.º 1
0
        virtual XamlValueConverter <TypeConverter> LookupTypeConverter()
        {
            var t = UnderlyingType;

            if (t == null)
            {
                return(null);
            }

            var xamlTypeConverter = LookupXamlTypeConverter();

            if (xamlTypeConverter != null)
            {
                return(new XamlXamlTypeValueConverter(xamlTypeConverter, this));
            }

            var converterName = CustomAttributeProvider.GetTypeConverterName(false);

            if (converterName != null)
            {
                return(SchemaContext.GetValueConverter <TypeConverter>(Type.GetType(converterName), this));
            }

            // equivalent to TypeExtension.
            // FIXME: not sure if it should be specially handled here.
            if (t == typeof(Type))
            {
                t = typeof(TypeExtension);
            }

            t = Nullable.GetUnderlyingType(t) ?? t;

            if (t == typeof(object))             // This is a special case. ConverterType is null.
            {
                return(SchemaContext.GetValueConverter <TypeConverter>(null, this));
            }

            if (t == typeof(DateTime))
            {
                return(SchemaContext.GetValueConverter <TypeConverter>(typeof(ComponentModel.DateTimeConverter), this));
            }

            if (t == typeof(Uri))
            {
                return(SchemaContext.GetValueConverter <TypeConverter>(typeof(UriTypeConverter), this));
            }

            // It's still not decent to check CollectionConverter.

            var tc = t.GetTypeConverter();

            if (tc != null && !tc.IsBaseTypeConverter())
            {
                var vc = SchemaContext.GetValueConverter <TypeConverter>(tc.GetType(), this);
                vc.ConverterInstance = tc;
                return(vc);
            }

            return(null);
        }
Ejemplo n.º 2
0
 protected virtual XamlValueConverter <XamlDeferringLoader> LookupDeferringLoader()
 {
     if (AreAttributesAvailable)
     {
         Type[] loaderTypes = _reflector.GetAttributeTypes(typeof(XamlDeferLoadAttribute), 2);
         if (loaderTypes != null)
         {
             return(SchemaContext.GetValueConverter <XamlDeferringLoader>(loaderTypes[0], null));
         }
     }
     if (Type != null)
     {
         return(Type.DeferringLoader);
     }
     return(null);
 }
Ejemplo n.º 3
0
        protected virtual XamlValueConverter <TypeConverter> LookupTypeConverter()
        {
            if (gotTypeConverter)
            {
                return(cachedTypeConverter);
            }

            gotTypeConverter = true;

            var t = UnderlyingType;

            if (t == null)
            {
                return(null);
            }

            // equivalent to TypeExtension.
            // FIXME: not sure if it should be specially handled here.
            if (t == typeof(Type))
            {
                t = typeof(TypeExtension);
            }

            var a  = GetCustomAttributeProvider();
            var ca = a?.GetCustomAttribute <TypeConverterAttribute>(false);

            if (ca != null)
            {
                return(cachedTypeConverter = SchemaContext.GetValueConverter <TypeConverter> (Type.GetType(ca.ConverterTypeName), this));
            }

            if (t == typeof(object))              // This is a special case. ConverterType is null.
            {
                return(cachedTypeConverter = SchemaContext.GetValueConverter <TypeConverter> (null, this));
            }

            // It's still not decent to check CollectionConverter.
            var tct = t.GetTypeConverter()?.GetType();

            if (tct != null && tct != typeof(TypeConverter))              //*PCL && tct != typeof (CollectionConverter)) //*PCL && tct != typeof (ReferenceConverter))
            {
                return(cachedTypeConverter = SchemaContext.GetValueConverter <TypeConverter> (tct, this));
            }
            return(null);
        }
Ejemplo n.º 4
0
        protected virtual XamlValueConverter <ValueSerializer> LookupValueSerializer()
        {
            XamlValueConverter <ValueSerializer> result = null;

            if (AreAttributesAvailable)
            {
                Type converterType = _reflector.GetAttributeType(typeof(ValueSerializerAttribute));
                if (converterType != null)
                {
                    result = SchemaContext.GetValueConverter <ValueSerializer>(converterType, null);
                }
            }
            if (result == null && Type != null)
            {
                result = Type.ValueSerializer;
            }
            return(result);
        }
Ejemplo n.º 5
0
        protected virtual XamlValueConverter <TypeConverter> LookupTypeConverter()
        {
            var t = UnderlyingType;

            if (t == null)
            {
                return(null);
            }

            // equivalent to TypeExtension.
            // FIXME: not sure if it should be specially handled here.
            if (t == typeof(Type))
            {
                t = typeof(TypeExtension);
            }

            var a  = GetCustomAttributeProvider();
            var ca = a != null?a.GetCustomAttribute <TypeConverterAttribute> (false) : null;

            if (ca != null)
            {
                return(SchemaContext.GetValueConverter <TypeConverter> (Type.GetType(ca.ConverterTypeName), this));
            }

            if (t == typeof(object))              // This is a special case. ConverterType is null.
            {
                return(SchemaContext.GetValueConverter <TypeConverter> (null, this));
            }

            // It's still not decent to check CollectionConverter.
            var tct = t.GetTypeConverter().GetType();

#if MOONLIGHT
            if (tct != typeof(TypeConverter) && tct.Name != "CollectionConverter" && tct.Name != "ReferenceConverter")
#else
            if (tct != typeof(TypeConverter) && tct != typeof(CollectionConverter) && tct != typeof(ReferenceConverter))
#endif
            { return(SchemaContext.GetValueConverter <TypeConverter> (tct, this)); }
            return(null);
        }
Ejemplo n.º 6
0
        protected virtual XamlValueConverter <TypeConverter> LookupTypeConverter()
        {
            var t = UnderlyingType;

            if (t == null)
            {
                return(null);
            }

            // equivalent to TypeExtension.
            // FIXME: not sure if it should be specially handled here.
            if (t == typeof(Type))
            {
                t = typeof(TypeExtension);
            }

            t = Nullable.GetUnderlyingType(t) ?? t;

            var a  = CustomAttributeProvider;
            var ca = a?.GetCustomAttribute <TypeConverterAttribute>(false);

            if (ca != null)
            {
                return(SchemaContext.GetValueConverter <TypeConverter>(Type.GetType(ca.ConverterTypeName), this));
            }

            if (t == typeof(object))             // This is a special case. ConverterType is null.
            {
                return(SchemaContext.GetValueConverter <TypeConverter>(null, this));
            }

            if (t == typeof(DateTime))
            {
                return(SchemaContext.GetValueConverter <TypeConverter>(typeof(ComponentModel.DateTimeConverter), this));
            }

            if (t == typeof(Uri))
            {
                return(SchemaContext.GetValueConverter <TypeConverter>(typeof(UriTypeConverter), this));
            }

            // It's still not decent to check CollectionConverter.
            var tc  = t.GetTypeConverter();
            var tct = tc?.GetType();

            if (tct != null &&
                tct != typeof(TypeConverter)
#if NETSTANDARD
                && tct != typeof(CollectionConverter)
#else
                && tct.FullName != "System.ComponentModel.CollectionConverter"
#endif
                && tct.FullName != "System.ComponentModel.ReferenceConverter"
                )
            {
                var vc = SchemaContext.GetValueConverter <TypeConverter>(tct, this);
                vc.InitialConverterInstance = tc;
                return(vc);
            }

            return(null);
        }