/// <summary> /// Creates a new XamlObjectServiceProvider instance. /// </summary> public XamlObjectServiceProvider(XamlObject obj) { if (obj == null) { throw new ArgumentNullException("obj"); } XamlObject = obj; Resolver = new XamlTypeResolverProvider(obj); }
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value == null) { return(null); } if (value is string) { XamlTypeResolverProvider xamlTypeResolver = (XamlTypeResolverProvider)context.GetService(typeof(XamlTypeResolverProvider)); if (xamlTypeResolver == null) { throw new XamlLoadException("XamlTypeResolverProvider not found in type descriptor context."); } XamlPropertyInfo prop = xamlTypeResolver.ResolveProperty((string)value); if (prop == null) { throw new XamlLoadException("Could not find property " + value + "."); } XamlDependencyPropertyInfo depProp = prop as XamlDependencyPropertyInfo; if (depProp != null) { return(depProp.DependencyProperty); } FieldInfo field = prop.TargetType.GetField(prop.Name + "Property", BindingFlags.Public | BindingFlags.Static); if (field != null && field.FieldType == typeof(DependencyProperty)) { return((DependencyProperty)field.GetValue(null)); } throw new XamlLoadException("Property " + value + " is not a dependency property."); } else { return(base.ConvertFrom(context, culture, value)); } }