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 しようとしても、まったく同じように失敗します。
困惑した。