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); }
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); }
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); }
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); }
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); }
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); }