用于确定嵌入 XAML 的程序集的 WPF 标记扩展
本文关键字:程序集 WPF 扩展 XAML 用于 | 更新日期: 2023-09-27 17:55:15
我有一个 WPF 项目(在 .NET 4.0 中),其中 XAML 资源作为程序集嵌入到页面中。在 XAML 中,我需要具有在另一个程序集中声明的标记扩展,该程序集对 XAML 的程序集没有特定的了解。
现在,我需要此标记扩展能够访问嵌入 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 中使用它。(示例)
您的方法是通过动态加载所需的程序集在代码隐藏中使用标记扩展。