用于确定嵌入 XAML 的程序集的 WPF 标记扩展

本文关键字:程序集 WPF 扩展 XAML 用于 | 更新日期: 2023-09-27 17:55:15

我有一个 WPF 项目(在 .NET 4.0 中),其中 XAML 资源作为程序集嵌入到页面中。在 XAML 中,我需要具有在另一个程序集中声明的标记扩展,该程序集对 XAML 的程序集没有特定的了解。

现在,我需要此标记扩展能够访问嵌入 XAML 的程序集。这怎么可能?

用于确定嵌入 XAML 的程序集的 WPF 标记扩展

经过一番玩弄,我解决了:

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 中使用它。(示例)

您的方法是通过动态加载所需的程序集在代码隐藏中使用标记扩展。