如果不支持嵌套类型,如何定义可空类型

时间:2016-09-14 09:08:37

标签: wpf xaml

我使用的是某个组件,其中一个属性属于System.Type类型。这在大多数情况下都可以正常工作,但现在我发现自己需要int?。这看起来并不那么简单,经过一些搜索和反复试验,我最终得到了这个:

<local:NullableUInt32PropertyEditor PropertyType="{x:Type system:Nullable`1[System.UInt32]}"/>

这会编译并按预期工作,但错误列表会给出

Nested types are not supported: Nullable`1[System.UInt32].

Intellisense还在语句下给出了一个squigly行,预览也说明了invallid标记。

处理此问题的正确方法是什么?

谢谢你, 杰夫

编辑:这与在此问题中声明值不同(Declare a Nullable int (int?) using XAML)。我需要声明类型,而不是值。

1 个答案:

答案 0 :(得分:0)

经过一些进一步的研究后,我提出了这个解决方案:

public class NullableExtension : TypeExtension
{
    public NullableExtension()
    {
    }

    public NullableExtension(string type)
        : base(type)
    {
    }

    public NullableExtension(Type type)
        : base(type)
    {
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        Type basis = (Type)base.ProvideValue(serviceProvider);
        return typeof(Nullable<>).MakeGenericType(basis);
    }
}

然后在xaml:

<local:NullableUInt32PropertyEditor PropertyType="{local:Nullable system:UInt32}"/>