Browse Source

fix resolving attached members in XamlAstResolver

pull/45/merge
Siegfried Pammer 12 years ago
parent
commit
50bc7eab20
  1. 29
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlAstResolver.cs

29
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlAstResolver.cs

@ -56,9 +56,9 @@ namespace ICSharpCode.XamlBinding
{ {
IMember member = null, underlying = null; IMember member = null, underlying = null;
IType type = null; IType type = null;
string namespaceName = string.IsNullOrEmpty(attribute.Namespace) ? attribute.ParentElement.Namespace : attribute.Namespace;
string propertyName = attribute.LocalName; string propertyName = attribute.LocalName;
if (propertyName.Contains(".")) { if (propertyName.Contains(".")) {
string namespaceName = string.IsNullOrEmpty(attribute.Namespace) ? attribute.ParentElement.LookupNamespace("") : attribute.Namespace;
string name = propertyName.Substring(0, propertyName.IndexOf('.')); string name = propertyName.Substring(0, propertyName.IndexOf('.'));
propertyName = propertyName.Substring(propertyName.IndexOf('.') + 1); propertyName = propertyName.Substring(propertyName.IndexOf('.') + 1);
ITypeReference reference = XamlUnresolvedFile.CreateTypeReference(namespaceName, name); ITypeReference reference = XamlUnresolvedFile.CreateTypeReference(namespaceName, name);
@ -67,7 +67,7 @@ namespace ICSharpCode.XamlBinding
if (member == null) if (member == null)
member = FindAttachedMember(type, propertyName, out underlying); member = FindAttachedMember(type, propertyName, out underlying);
} else { } else {
ITypeReference reference = XamlUnresolvedFile.CreateTypeReference(namespaceName, attribute.ParentElement.LocalName); ITypeReference reference = XamlUnresolvedFile.CreateTypeReference(attribute.ParentElement.Namespace, attribute.ParentElement.LocalName);
type = reference.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)); type = reference.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly));
member = FindMember(type, propertyName); member = FindMember(type, propertyName);
} }
@ -127,18 +127,21 @@ namespace ICSharpCode.XamlBinding
.GetMethods(m => m.IsPublic && m.IsStatic && m.Parameters.Count == 1 .GetMethods(m => m.IsPublic && m.IsStatic && m.Parameters.Count == 1
&& m.Name == "Get" + propertyName) && m.Name == "Get" + propertyName)
.FirstOrDefault(); .FirstOrDefault();
ITypeResolveContext localContext = new SimpleTypeResolveContext(type.GetDefinition()); var definition = type.GetDefinition();
if (underlyingMember != null) if (definition != null) {
return new DefaultUnresolvedProperty { Name = propertyName } ITypeResolveContext localContext = new SimpleTypeResolveContext(definition);
.CreateResolved(localContext); if (underlyingMember != null)
return new DefaultUnresolvedProperty { Name = propertyName }
.CreateResolved(localContext);
underlyingMember = type underlyingMember = type
.GetMethods(m => m.IsPublic && m.IsStatic && m.Parameters.Count == 2 .GetMethods(m => m.IsPublic && m.IsStatic && m.Parameters.Count == 2
&& m.Name == "Add" + propertyName + "Handler") && m.Name == "Add" + propertyName + "Handler")
.FirstOrDefault(); .FirstOrDefault();
if (underlyingMember != null) if (underlyingMember != null)
return new DefaultUnresolvedEvent { Name = propertyName } return new DefaultUnresolvedEvent { Name = propertyName }
.CreateResolved(localContext); .CreateResolved(localContext);
}
return null; return null;
} }

Loading…
Cancel
Save