我正在尝试使用与 StaticExtension 使用的相同命名空间:StaticType.Property 语法在 WPF 标记扩展内进行一些类型解析。该扩展在运行时以及在 Visual Studio 设计器中工作正常,但在 Expression Blend 中失败。经过一些调试后,我发现失败发生在对 IXamlTypeResolver.Resolve() 的调用中。
// Parse Static=properties:Resources.HelloWorld like static resource
int index = this.Static.IndexOf('.');
if (index == -1)
throw new ArgumentException(Resources.InvalidStaticBindingSyntax + ": " +
this.Static);
// resolve properties:Resources
string typeName = this.Static.Substring(0, index);
IXamlTypeResolver service = _serviceProvider.GetService(typeof(IXamlTypeResolver))
as IXamlTypeResolver;
Type memberType = service.Resolve(typeName);
string propName = this.Static.Substring(index + 1);
localized = memberType.GetProperty(propName,
BindingFlags.Public |
BindingFlags.Static |
BindingFlags.FlattenHierarchy)
.GetValue(memberType, null);
问题是 service.Resolve(typeName) 失败,但仅在 Blend 中。
看看带有 Reflector 的 StaticExtension,MS 使用的代码看起来并没有太大的不同。
它看起来像一个安全问题 - 但我什至尝试签署并 GAC 程序集,但它仍然失败完全一样。
难住了。