WPF MarkupExtension для определения сборки, в которую встроен XAML - PullRequest
0 голосов
/ 08 мая 2011

У меня есть проект WPF (в .NET 4.0) с ресурсами XAML, встроенными в сборку, как Pages.В XAML мне нужно иметь MarkupExtension, которое объявлено в другой сборке, которая не имеет конкретных знаний о сборке с XAML.

Теперь мне нужно это MarkupExtension, чтобы иметь возможность доступа к сборке, в которую встроен XAML.Как это возможно?

Ответы [ 2 ]

1 голос
/ 13 мая 2011

После небольшой игры я решил:

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 );
    ...
}

Надеюсь, это поможет кому-то еще.

0 голосов
/ 08 мая 2011

Проблема: вам нужно имя / путь сборки, чтобы использовать ее в XAML. ( Пример )

Ваш способ заключается в использовании MarkupExtension в выделенном фрагменте кода путем динамической загрузки необходимой сборки.

...