Как создать 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
класс (который используется в Binding
MarkupExtension
).