static IReturnType Resolve(this PropertyPathSegment segment, XamlCompletionContext context, IReturnType previousType) { if (segment.Kind == SegmentKind.SourceTraversal) return previousType; if (segment.Kind == SegmentKind.ControlChar) return previousType; string content = segment.Content; if (segment.Kind == SegmentKind.AttachedProperty && content.StartsWith("(")) { content = content.TrimStart('('); if (content.Contains(".")) content = content.Remove(content.IndexOf('.')); } XamlContextDescription tmp = context.Description; context.Description = XamlContextDescription.InTag; ResolveResult rr = XamlResolver.Resolve(content, context); IReturnType type = null; if (rr is TypeResolveResult) type = (rr as TypeResolveResult).ResolvedType; if (previousType != null) { IMember member = previousType.GetMemberByName(content); if (member != null) type = member.ReturnType; } else { if (rr is MemberResolveResult) { MemberResolveResult mrr = rr as MemberResolveResult; if (mrr.ResolvedMember != null) type = mrr.ResolvedMember.ReturnType; } if (rr is TypeResolveResult) type = (rr as TypeResolveResult).ResolvedType; } context.Description = tmp; return type; }