WPF MarkupExtension用于确定嵌入XAML的程序集

时间:2011-05-08 10:44:32

标签: c# wpf xaml markup-extensions baml

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

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

2 个答案:

答案 0 :(得分: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 );
    ...
}

希望能帮助别人。

答案 1 :(得分:0)

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

您可以通过动态加载所需的程序集,在代码隐藏中使用MarkupExtension。