2011-05-08 36 views
0

我有一个WPF项目(在.NET 4.0中),其中XAML资源以页面的形式嵌入装配。在XAML中,我需要在另一个程序集中声明MarkupExtension,该程序集不具有XAML程序集的特定知识。WPF MarkupExtension来确定装配了XAML的装配

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

回答

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

希望帮助别人。

0

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

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

+0

必须有一些“上下文”,其中正在调用MarkupExtension或正在加载XAML/BAML。 – 2011-05-08 21:20:19