Как создать MarkupExtension с нестроковыми параметрами?

Я работаю над 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
    }
}

1 ответ

Любые параметры к вашему MarkupExtension подвергаются такому же поведению синтаксического анализа, что и свойства объектов CLR. Вы можете использовать TypeConverter чтобы позволить пользователю предоставить string который преобразуется в целевой тип, или вы можете использовать другой MarkupExtension,

В качестве примера первого см. ColorConverter учебный класс. В качестве примера последнего см. RelativeSource класс (который используется в BindingMarkupExtension).

Другие вопросы по тегам