我有一个 WPF 项目(在 .NET 4.0 中),其中 XAML 资源作为 Pages 作为程序集嵌入。在 XAML 中,我需要在另一个程序集中声明 MarkupExtension,该程序集对 XAML 的程序集没有特定的知识。
现在,我需要这个 MarkupExtension 才能访问嵌入 XAML 的程序集。这怎么可能?
我有一个 WPF 项目(在 .NET 4.0 中),其中 XAML 资源作为 Pages 作为程序集嵌入。在 XAML 中,我需要在另一个程序集中声明 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 中使用它。(示例)
您的方法是通过动态加载所需的程序集在代码隐藏中使用 MarkupExtension。