我有一个WPF项目(在.NET 4.0中),其中XAML资源作为Pages的程序集嵌入。在XAML中,我需要具有在另一个程序集中声明的MarkupExtension,该程序集对XAML的程序集没有特定的了解。
现在,我需要这个MarkupExtension才能访问嵌入了XAML的程序集。这怎么可能?
答案 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。