private XamlMemberDefinition VisitMember(XamlXmlReader reader, XamlObjectDefinition owner) { var member = new XamlMemberDefinition(reader.Member, reader.LineNumber, reader.LinePosition, owner); while (reader.Read()) { WriteState(reader); switch (reader.NodeType) { case XamlNodeType.EndMember: _depth--; return(member); case XamlNodeType.Value: if (IsLiteralInlineText(reader.Value, member, owner)) { var run = ConvertLiteralInlineTextToRun(reader); member.Objects.Add(run); } else { if (member.Value is string s) { member.Value += ", " + reader.Value; } else { member.Value = reader.Value; } } break; case XamlNodeType.StartObject: _depth++; member.Objects.Add(VisitObject(reader, owner)); break; case XamlNodeType.EndObject: _depth--; break; case XamlNodeType.NamespaceDeclaration: // Skip break; default: throw new InvalidOperationException("Unable to process {2} node at Line {0}, position {1}".InvariantCultureFormat(reader.LineNumber, reader.LinePosition, reader.NodeType)); } } return(member); }
private bool IsLiteralInlineText(object value, XamlMemberDefinition member, XamlObjectDefinition xamlObject) { return(value is string && xamlObject.Type.Name == "TextBlock" && (member.Member.Name == "_UnknownContent" || member.Member.Name == "Inlines")); }
public Subclass(XamlMemberDefinition contentOwner, string returnType) { ContentOwner = contentOwner; ReturnType = returnType; }
public Subclass(XamlMemberDefinition contentOwner, string returnType, string defaultBindMode) { ContentOwner = contentOwner; ReturnType = returnType; DefaultBindMode = defaultBindMode; }