WPF MarkupExtension для определения сборки, в которую встроен XAML
У меня есть проект WPF (в.NET 4.0) с ресурсами XAML, встроенными в сборку, как Pages. В XAML мне нужно иметь MarkupExtension, которое объявлено в другой сборке, которая не имеет специальных знаний о сборке с XAML.
Теперь мне нужно это MarkupExtension, чтобы иметь возможность доступа к сборке, в которую встроен XAML. Как это возможно?
2 ответа
Решение
После небольшой игры я решил это:
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 в коде позади, динамически загружая нужную сборку.