0

我有一个 WPF 项目(在 .NET 4.0 中),其中 XAML 资源作为 Pages 作为程序集嵌入。在 XAML 中,我需要在另一个程序集中声明 MarkupExtension,该程序集对 XAML 的程序集没有特定的知识。

现在,我需要这个 MarkupExtension 才能访问嵌入 XAML 的程序集。这怎么可能?

4

2 回答 2

1

玩了一会儿后,我解决了这个问题:

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 );
    ...
}

希望对其他人有所帮助。

于 2011-05-13T03:23:21.723 回答
0

问题是:您需要程序集的名称/路径才能在 XAML 中使用它。(示例

您的方法是通过动态加载所需的程序集在代码隐藏中使用 MarkupExtension。

于 2011-05-08T14:21:17.940 回答