/// <summary> /// Creates a known element registration for the specified type. /// </summary> /// <param name="type">The type for which to create a registration.</param> /// <param name="attr">The attribute that marks the type as a known type.</param> /// <returns>The <see cref="KnownType"/> registration that was created.</returns> private KnownType CreateKnownElementRegistration(Type type, UvmlKnownTypeAttribute attr) { var defaultPropertyAttr = (UvmlDefaultPropertyAttribute)type.GetCustomAttributes(typeof(UvmlDefaultPropertyAttribute), true).SingleOrDefault(); var defaultProperty = default(String); if (defaultPropertyAttr != null) { defaultProperty = defaultPropertyAttr.Name; } var ctor = type.GetConstructor(new[] { typeof(UltravioletContext), typeof(String) }); if (ctor == null && !type.IsAbstract) { throw new InvalidOperationException(PresentationStrings.UIElementInvalidCtor.Format(type.Name)); } RuntimeHelpers.RunClassConstructor(type.TypeHandle); var registration = new KnownElement(attr.Name ?? type.Name, type, defaultProperty); RegisterDefaultComponentTemplate(type, attr); return(registration); }
/// <summary> /// Gets the registration for the specified known element. /// </summary> /// <param name="type">The CLR type of the known element for which to retrieve a registration.</param> /// <param name="registration">The registration for the known element associated with the specified CLR type.</param> /// <returns><see langword="true"/> if a known element associated with the specified CLR type exists; otherwise, <c>false.</c></returns> private Boolean GetKnownElementRegistration(Type type, out KnownElement registration) { KnownType typeRegistration; if (GetKnownTypeRegistration(type, out typeRegistration) && typeRegistration is KnownElement) { registration = (KnownElement)typeRegistration; return(true); } registration = null; return(false); }