2011-05-08 25 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