【发布时间】:2011-05-13 11:23:21
【问题描述】:
我有一个 WPF 项目(在 .NET 4.0 中),其中 XAML 资源作为 Pages 的程序集嵌入。在 XAML 中,我需要在另一个程序集中声明 MarkupExtension,该程序集对 XAML 的程序集没有特定知识。
现在,我需要此 MarkupExtension 才能访问嵌入 XAML 的程序集。这怎么可能?
【问题讨论】:
标签: c# wpf xaml markup-extensions baml
我有一个 WPF 项目(在 .NET 4.0 中),其中 XAML 资源作为 Pages 的程序集嵌入。在 XAML 中,我需要在另一个程序集中声明 MarkupExtension,该程序集对 XAML 的程序集没有特定知识。
现在,我需要此 MarkupExtension 才能访问嵌入 XAML 的程序集。这怎么可能?
【问题讨论】:
标签: c# wpf xaml markup-extensions baml
玩了一会儿,我解决了:
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。
【讨论】: