private void RegisterProperty(ElementAttributeMetadata metadata, String value) { var property = metadata.XName; if (_smartProperties.ContainsKey(property)) { throw new ElementException(ElementErrorCodes.PropertyAlreadyRegistered, property); } var propertyInfo = RuntimeType.GetProperty(metadata.MemberInfo.Name); if (value.StartsWith("{") && value.EndsWith("}")) { var cmd = value.Trim("{} ".ToCharArray()); var pair = cmd.Split(" ".ToCharArray(), 2); var keyword = pair[0]; var instruccion = pair.GetLength(0) > 1 ? pair[1] : String.Empty; var extension = MetadataDirectory.GetCustomMarkupExtensions(keyword); if (extension == null) { throw new ElementException(ElementErrorCodes.CustomMarkupExtensionNotFound, keyword); } var @object = extension.ProvideValue(this, metadata, keyword, instruccion); _smartProperties.Add(property, new SmartProperty(@object)); return; } _smartProperties.Add(property, new SmartProperty(Cast(value, propertyInfo.PropertyType))); }
private void SetValue(ElementAttributeMetadata attribute, Object value) { if (attribute.IsReadOnly && !Application.IsResolvingDependencies) { throw new ElementException(ElementErrorCodes.InvalidOperation, "SetValue (" + attribute.ToString(true) + ") no puede llamarse, esta definido IsReadOnly=true."); } switch (attribute.MemberInfo.MemberType) { case MemberTypes.Field: var field = RuntimeType.GetField(attribute.MemberInfo.Name); field.SetValue(this, Cast(value, field.FieldType)); break; case MemberTypes.Property: var property = RuntimeType.GetProperty(attribute.MemberInfo.Name); if (property.GetSetMethod(true) != null) { property.SetValue(this, Cast(value, property.PropertyType), null); } break; default: throw new ElementException(ElementErrorCodes.InvalidOperation, "SetValue (" + attribute.ToString(true) + ") solo puede llamarse sobre miembros del tipo Field o Property."); } }
public object ProvideValue(FrameworkElement frameworkElement, ElementAttributeMetadata attributeMetadata, string keyword, string content) { return(frameworkElement.Application.GetFrameworkElement(content)); }
public object ProvideValue(FrameworkElement frameworkElement, ElementAttributeMetadata attributeMetadata, string keyword, string content) { return(attributeMetadata.DefaultValue); }