XAMLリソースがページとしてアセンブリとして埋め込まれているWPFプロジェクト(.NET 4.0)があります。XAMLでは、XAMLを使用したアセンブリに関する特定の知識を持たない別のアセンブリで宣言されたMarkupExtensionが必要です。
ここで、XAMLが埋め込まれているアセンブリにアクセスできるようにするには、このMarkupExtensionが必要です。これはどのように可能ですか?
XAMLリソースがページとしてアセンブリとして埋め込まれているWPFプロジェクト(.NET 4.0)があります。XAMLでは、XAMLを使用したアセンブリに関する特定の知識を持たない別のアセンブリで宣言されたMarkupExtensionが必要です。
ここで、XAMLが埋め込まれているアセンブリにアクセスできるようにするには、このMarkupExtensionが必要です。これはどのように可能ですか?
少し遊んだ後、私はそれを解決しました:
public override object ProvideValue( IServiceProvider serviceProvider )
{
var contextProvider = (IXamlSchemaContextProvider)serviceProvider.GetService( typeof( IXamlSchemaContextProvider ) );
var type = contextProvider.SchemaContext.GetType().Assembly.GetType( "System.Windows.Baml2006.Baml2006SchemaContext" );
var property = type.GetProperty( "LocalAssembly", BindingFlags.Instance | BindingFlags.NonPublic );
var assembly = (Assembly)property.GetValue( contextProvider, null );
...
}
それが他の誰かを助けることを願っています。
問題は次のとおりです。XAMLで使用するには、アセンブリの名前/パスが必要です。(例)
必要なアセンブリを動的にロードすることにより、コードビハインドでMarkupExtensionを使用する方法があります。