我有一个WPF项目(在.NET 4.0中),其中XAML资源以页面的形式嵌入装配。在XAML中,我需要在另一个程序集中声明MarkupExtension,该程序集不具有XAML程序集的特定知识。WPF MarkupExtension来确定装配了XAML的装配
现在,我需要这个MarkupExtension来访问嵌入了XAML的程序集。这怎么可能?
我有一个WPF项目(在.NET 4.0中),其中XAML资源以页面的形式嵌入装配。在XAML中,我需要在另一个程序集中声明MarkupExtension,该程序集不具有XAML程序集的特定知识。WPF MarkupExtension来确定装配了XAML的装配
现在,我需要这个MarkupExtension来访问嵌入了XAML的程序集。这怎么可能?
有点打转转后,我就出来:
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中使用它。 (example)
您的方法是通过动态加载您需要的程序集在代码隐藏中使用MarkupExtension。
必须有一些“上下文”,其中正在调用MarkupExtension或正在加载XAML/BAML。 – 2011-05-08 21:20:19