如何使用非字符串参数创建MarkupExtension?

时间:2008-12-16 20:30:43

标签: c# .net wpf xaml markup-extensions

我正在WPF应用程序中处理Custom MarkupExtension。我见过的每个文档示例都使用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 个答案:

答案 0 :(得分:0)

MarkupExtension的任何参数都与CLR对象的属性具有相同的解析行为。您可以使用TypeConverter允许用户提供转换为目标类型的string,也可以使用其他MarkupExtension

作为前者的一个例子,请参阅ColorConverter课程。作为后者的示例,请参阅RelativeSource类(在Binding MarkupExtension中使用)。