如何通过XAML传递对象的类型

时间:2012-08-21 19:41:56

标签: c# silverlight xaml

我正在尝试在XAML中获取一个类型对象。

x:Type={...}

但我意识到Silverlight不支持它。我试图在以下问题中使用它(在EnumerationExtension类中):

Databinding an enum property to a ComboBox in WPF

如何在XAML中传递类型?C

2 个答案:

答案 0 :(得分:1)

如果SL 5则自定义MarkupExtension
其他BindingConverter一起返回value.GetType()


我的例子:

public class TypeExtension : IMarkupExtension<Type>
{
    public string TypeName { get; set; }

    public TypeExtension() { }
    public TypeExtension(string typeName)
        : this()
    {
        if (typeName == null) throw new ArgumentNullException("typeName");

        TypeName = typeName;
    }

    public Type ProvideValue(IServiceProvider serviceProvider)
    {
        var typeResolver = (IXamlTypeResolver)serviceProvider.GetService(typeof(IXamlTypeResolver));
        var type = typeResolver.Resolve(TypeName);
        return type;
    }
}

请注意,SL 5中不支持构造函数,因此您需要在XAML中使用属性名称:

{me:Type TypeName=local:SomeClass}

答案 1 :(得分:0)

你可以create a Custom Markup Extension(自Silverlight 5起可用)

或者你可以use this one