Я работаю над Custom MarkupExtension в приложении WPF. Каждый документированный пример, который я видел, использует строковые параметры из XAML для создания нового объекта. Можно ли использовать нестроковый параметр?
Другими словами, как я могу сделать что-то подобное?
[MarkupExtensionReturnType(typeof(Uri))]
public class RefPackUriExtension : MarkupExtension
{
object _assembly = null;
public RefPackUriExtension() { }
public RefPackUriExtension(object assembly)
{
this._assembly = assembly;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
//return an object by using the "_assembly" member somehow
}
}





Любые параметры вашего MarkupExtension подвергаются тому же синтаксическому анализу, что и свойства объектов CLR. Вы можете использовать TypeConverter, чтобы позволить пользователю предоставить string, преобразованный в целевой тип, или вы можете использовать другой MarkupExtension.
В качестве примера первого см. Класс ColorConverter. В качестве примера последнего см. Класс RelativeSource (который используется в BindingMarkupExtension).
Что было бы полезно, так это пример XAML, используемого в таких случаях.
Вы уверены, что это работает? Перед тем, как опубликовать вопрос, я попытался использовать Binding MarkupExtension и получил ошибку времени компиляции.