【问题标题】:WPF MarkupExtension to Determine Assembly in which XAML is EmbeddedWPF MarkupExtension 确定嵌入 XAML 的程序集
【发布时间】:2011-05-13 11:23:21
【问题描述】:

我有一个 WPF 项目(在 .NET 4.0 中),其中 XAML 资源作为 Pages 的程序集嵌入。在 XAML 中,我需要在另一个程序集中声明 MarkupExtension,该程序集对 XAML 的程序集没有特定知识。

现在,我需要此 MarkupExtension 才能访问嵌入 XAML 的程序集。这怎么可能?

【问题讨论】:

    标签: c# wpf xaml markup-extensions baml


    【解决方案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 );
        ...
    }
    

    希望对其他人有所帮助。

    【讨论】:

      【解决方案2】:

      问题是:您需要程序集的名称/路径才能在 XAML 中使用它。 (example)

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

      【讨论】:

      • 必须有一些“上下文”在其中调用 MarkupExtension 或加载 XAML/BAML。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 2011-03-04
      • 1970-01-01
      • 2013-10-14
      相关资源
      最近更新 更多