我有一個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